diff --git a/.clang-tidy b/.clang-tidy index d7607ac2c776e..d85ba329c3b50 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -55,7 +55,7 @@ readability-*,\ -readability-redundant-declaration,\ " WarningsAsErrors: '*' -HeaderFilterRegex: '(src|test).*' +HeaderFilterRegex: '(src|test|tools).*' FormatStyle: none CheckOptions: - key: readability-uppercase-literal-suffix.NewSuffixes diff --git a/.travis.yml b/.travis.yml index 16230b0893076..4a620558ba140 100644 --- a/.travis.yml +++ b/.travis.yml @@ -41,7 +41,7 @@ branches: # - CMAKE=1 # - SANITIZE=address # - LOCALIZE=0 -# - A clang-tidy run +# - A clang-tidy run (now switched to GitHub workflow) # - Tests with important mods enabled (Magiclysm, RL_Classes) # We try to minimize the number of builds subject to those constraints. @@ -111,20 +111,12 @@ jobs: directories: - $HOME/.ccache - - env: CLANG=clang++ NATIVE=osx OSX_MIN=10.13 TILES=1 SOUND=1 + - env: CLANG=clang++ NATIVE=osx OSX_MIN=10.13 TILES=1 SOUND=1 BREWGETTEXT=1 name: "Xcode 10.1 Make build with Tiles and sound (macOS)" os: osx osx_image: xcode10.1 compiler: clang - - env: CLANG=clang++-8 TILES=1 SOUND=1 CXXFLAGS=-Wno-unused-command-line-argument CMAKE=1 CATA_CLANG_TIDY=plugin - name: "Clang-tidy CMake build with Tiles and Sound" - compiler: clang - addons: &clang8 - apt: - packages: ["clang-8", "libclang-8-dev", "llvm-8-dev", "llvm-8-tools", "libsdl2-dev", "libsdl2-ttf-dev", "libsdl2-image-dev", "libsdl2-mixer-dev", "libpulse-dev", "libpulse0=1:8.0-0ubuntu3.10", "libpulse-mainloop-glib0=1:8.0-0ubuntu3.10"] - sources: [*apt_sources, llvm-toolchain-xenial-8] - # Finally check the compiler variants - stage: compilers # GCC 5.4 is default on Xenial diff --git a/CMakeLists.txt b/CMakeLists.txt index d0f5e0cc7f3c1..a56cfa0af9c53 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,7 +54,8 @@ ADD_DEFINITIONS(-DCMAKE) if (NOT ${GIT_VERSION} MATCHES GIT-NOTFOUND) string(REPLACE "-NOTFOUND" "" GIT_VERSION ${GIT_VERSION}) - FILE(WRITE ${CMAKE_SOURCE_DIR}/src/version.h "\#define VERSION \"${GIT_VERSION}\"\n") + 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") ADD_DEFINITIONS(-DGIT_VERSION) ELSE (NOT ${GIT_VERSION} MATCHES GIT-NOTFOUND) diff --git a/Makefile b/Makefile index 2a5fa2f84cd94..75e08e6a57537 100644 --- a/Makefile +++ b/Makefile @@ -451,6 +451,11 @@ ifeq ($(NATIVE), osx) LDFLAGS += -L$(LIBSDIR)/gettext/lib CXXFLAGS += -I$(LIBSDIR)/gettext/include endif + ifeq ($(BREWGETTEXT), 1) + # recent versions of brew will not allow you to link + LDFLAGS += -L/usr/local/opt/gettext/lib + CXXFLAGS += -I/usr/local/opt/gettext/include + endif ifeq ($(MACPORTS), 1) ifneq ($(TILES), 1) CXXFLAGS += -I$(shell ncursesw6-config --includedir) @@ -847,7 +852,7 @@ version: @( VERSION_STRING=$(VERSION) ; \ [ -e ".git" ] && GITVERSION=$$( git describe --tags --always --dirty --match "[0-9A-Z]*.[0-9A-Z]*" ) && VERSION_STRING=$$GITVERSION ; \ [ -e "$(SRC_DIR)/version.h" ] && OLDVERSION=$$(grep VERSION $(SRC_DIR)/version.h|cut -d '"' -f2) ; \ - if [ "x$$VERSION_STRING" != "x$$OLDVERSION" ]; then echo "#define VERSION \"$$VERSION_STRING\"" | tee $(SRC_DIR)/version.h ; fi \ + if [ "x$$VERSION_STRING" != "x$$OLDVERSION" ]; then printf '// NOLINT(cata-header-guard)\n#define VERSION "%s"\n' "$$VERSION_STRING" | tee $(SRC_DIR)/version.h ; fi \ ) # Unconditionally create the object dir on every invocation. diff --git a/build-scripts/build.sh b/build-scripts/build.sh index 2e86404900b47..c7cdd1a135996 100755 --- a/build-scripts/build.sh +++ b/build-scripts/build.sh @@ -12,8 +12,6 @@ function run_tests $WINE "$@" -d yes --use-colour yes --rng-seed time $EXTRA_TEST_OPTS | grep -Ev "^0\.0[0-9]{2} s:" } -date +%s > build-start-time - # We might need binaries installed via pip, so ensure that our personal bin dir is on the PATH export PATH=$HOME/.local/bin:$PATH diff --git a/build-scripts/clang-tidy-wrapper.sh b/build-scripts/clang-tidy-wrapper.sh index 8ca192cedae43..b1ea138356676 100755 --- a/build-scripts/clang-tidy-wrapper.sh +++ b/build-scripts/clang-tidy-wrapper.sh @@ -1,20 +1,8 @@ #!/bin/bash -# Wrapper script for clang tidy which is a no-op after some time limit to avoid -# hitting the Travis build timeout. - set -eu set -o pipefail -seconds_since_build_start=$(($(date +%s) - $(cat build-start-time))) -time_limit=$((15*60)) # Stop 15 minutes after build started -printf "%s/%s seconds elapsed\n" "$seconds_since_build_start" "$time_limit" -if [ "$seconds_since_build_start" -gt "$time_limit" ] -then - printf "Skipping clang-tidy %s due to time limit\n" "$*" - exit 0 -fi - plugin=build/tools/clang-tidy-plugin/libCataAnalyzerPlugin.so set -x diff --git a/build-scripts/requirements.sh b/build-scripts/requirements.sh index 3e9d88ee64f0b..c45be056bd724 100644 --- a/build-scripts/requirements.sh +++ b/build-scripts/requirements.sh @@ -74,7 +74,6 @@ fi if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update brew install sdl2 sdl2_image sdl2_ttf sdl2_mixer gettext ncurses ccache - brew link --force gettext ncurses fi if [[ "$NATIVE" == "android" ]]; then diff --git a/data/json/field_type.json b/data/json/field_type.json index a9c4e1daf7618..552f0d9e1982c 100644 --- a/data/json/field_type.json +++ b/data/json/field_type.json @@ -635,7 +635,7 @@ "type": "field_type", "legacy_enum_id": 25, "intensity_levels": [ - { "name": "faint glimmer", "color": "blue", "sym": "9", "light_emitted": 4 }, + { "name": "faint glimmer", "color": "blue", "sym": "9" }, { "name": "beam of light", "color": "light_blue" }, { "name": "intense beam of light", "color": "white" } ], diff --git a/data/json/furniture_and_terrain/terrain-flora.json b/data/json/furniture_and_terrain/terrain-flora.json index 5c6c822e5514f..96f8b664df022 100644 --- a/data/json/furniture_and_terrain/terrain-flora.json +++ b/data/json/furniture_and_terrain/terrain-flora.json @@ -1968,7 +1968,7 @@ "symbol": ".", "color": "light_green", "move_cost": 2, - "flags": [ "TRANSPARENT", "DIGGABLE", "FLAT" ], + "flags": [ "TRANSPARENT", "DIGGABLE", "FLAT", "PLOWABLE" ], "bash": { "sound": "thump", "ter_set": "t_null", "str_min": 40, "str_max": 100, "str_min_supported": 100, "bash_below": true } }, { diff --git a/data/json/itemgroups/Weapons_Mods_Ammo/guns.json b/data/json/itemgroups/Weapons_Mods_Ammo/guns.json index 54f039f72ee8d..e5ad9e2b885db 100644 --- a/data/json/itemgroups/Weapons_Mods_Ammo/guns.json +++ b/data/json/itemgroups/Weapons_Mods_Ammo/guns.json @@ -97,7 +97,8 @@ { "item": "sw_500", "prob": 25, "charges-min": 0, "charges-max": 5 }, { "item": "sw629", "prob": 40, "charges-min": 0, "charges-max": 6 }, { "item": "usp_45", "prob": 70, "charges-min": 0, "charges-max": 12 }, - { "item": "usp_9mm", "prob": 120, "charges-min": 0, "charges-max": 15 } + { "item": "usp_9mm", "prob": 120, "charges-min": 0, "charges-max": 15 }, + { "item": "draco", "prob": 30, "charges-min": 0, "charges-max": 30 } ] }, { @@ -116,7 +117,8 @@ { "item": "sw_500", "prob": 25, "charges-min": 0, "charges-max": 0 }, { "item": "sw629", "prob": 40, "charges-min": 0, "charges-max": 0 }, { "item": "usp_45", "prob": 70, "charges-min": 0, "charges-max": 0 }, - { "item": "usp_9mm", "prob": 120, "charges-min": 0, "charges-max": 0 } + { "item": "usp_9mm", "prob": 120, "charges-min": 0, "charges-max": 0 }, + { "item": "draco", "prob": 30, "charges-min": 0, "charges-max": 0 } ] }, { @@ -273,7 +275,8 @@ { "item": "ruger_mini", "prob": 60, "charges-min": 0, "charges-max": 5 }, { "item": "sks", "prob": 40, "charges-min": 0, "charges-max": 10 }, { "item": "win70", "prob": 15, "charges-min": 0, "charges-max": 3 }, - { "item": "1895sbl", "prob": 15, "charges-min": 0, "charges-max": 7 } + { "item": "1895sbl", "prob": 15, "charges-min": 0, "charges-max": 7 }, + { "item": "aksemi", "prob": 35, "charges-min": 0, "charges-max": 30 } ] }, { @@ -296,7 +299,8 @@ { "item": "ruger_mini", "prob": 60, "charges-min": 0, "charges-max": 0 }, { "item": "sks", "prob": 40, "charges-min": 0, "charges-max": 0 }, { "item": "win70", "prob": 15, "charges-min": 0, "charges-max": 0 }, - { "item": "1895sbl", "prob": 15, "charges-min": 0, "charges-max": 0 } + { "item": "1895sbl", "prob": 15, "charges-min": 0, "charges-max": 0 }, + { "item": "aksemi", "prob": 35, "charges-min": 0, "charges-max": 0 } ] }, { @@ -753,7 +757,8 @@ { "item": "shotgun_s", "prob": 10 }, { "item": "shotgun_d", "prob": 10, "charges-min": 0, "charges-max": 2 }, { "item": "sten", "prob": 20, "charges-min": 0, "charges-max": 32 }, - { "item": "sks", "prob": 10, "charges-min": 0, "charges-max": 10 } + { "item": "sks", "prob": 10, "charges-min": 0, "charges-max": 10 }, + { "item": "aksemi", "prob": 5, "charges-min": 0, "charges-max": 30 } ] } ] diff --git a/data/json/itemgroups/Weapons_Mods_Ammo/magazines.json b/data/json/itemgroups/Weapons_Mods_Ammo/magazines.json index e12afccfdc7bf..f2c57e9ad18d1 100644 --- a/data/json/itemgroups/Weapons_Mods_Ammo/magazines.json +++ b/data/json/itemgroups/Weapons_Mods_Ammo/magazines.json @@ -220,7 +220,8 @@ [ "stanag10", 30 ], [ "ruger30", 20 ], [ "stanag30", 10 ], - [ "ar10mag_20rd", 30 ] + [ "ar10mag_20rd", 30 ], + [ "akmag30", 25 ] ] }, { @@ -234,8 +235,10 @@ "id": "mags_rifle_rare", "//": "Aftermarket or otherwise uncommon rifle magazines excluding milspec.", "items": [ - [ "akmbigmag", 5 ], - [ "akmmag", 25 ], + [ "akmag10", 40 ], + [ "akmag20", 40 ], + [ "akmag40", 40 ], + [ "akdrum75", 30 ], [ "falmag", 100 ], [ "falbigmag", 50 ], [ "g3mag", 80 ], diff --git a/data/json/itemgroups/activities_hobbies.json b/data/json/itemgroups/activities_hobbies.json index f4b12d9a9c008..6a91bddfaa310 100644 --- a/data/json/itemgroups/activities_hobbies.json +++ b/data/json/itemgroups/activities_hobbies.json @@ -209,6 +209,7 @@ [ "bolt_cf", 5 ], [ "bbgun", 10 ], [ "crossbow", 2 ], + [ "compcrossbow", 2 ], [ "mag_survival", 40 ], [ "textbook_survival", 20 ], [ "modern_tanner", 8 ], diff --git a/data/json/itemgroups/collections_domestic.json b/data/json/itemgroups/collections_domestic.json index 90dbf4cadf0f5..d4a0834d5eb93 100644 --- a/data/json/itemgroups/collections_domestic.json +++ b/data/json/itemgroups/collections_domestic.json @@ -1060,6 +1060,7 @@ [ "throwing_axe", 25 ], [ "binoculars", 50 ], [ "crossbow", 20 ], + [ "compcrossbow", 20 ], [ "rapier", 1 ], [ "rapier_fake", 10 ], [ "cavalry_sabre", 1 ], diff --git a/data/json/itemgroups/main.json b/data/json/itemgroups/main.json index 2bdfd2580ee64..8f22ad6941d3c 100644 --- a/data/json/itemgroups/main.json +++ b/data/json/itemgroups/main.json @@ -234,7 +234,8 @@ "id": "archery", "subtype": "distribution", "entries": [ - { "item": "crossbow", "prob": 80 }, + { "item": "crossbow", "prob": 70 }, + { "item": "compcrossbow", "prob": 10 }, { "item": "bullet_crossbow", "prob": 10 }, { "item": "hand_crossbow", "prob": 10 }, { "item": "longbow", "prob": 40 }, diff --git a/data/json/itemgroups/roof.json b/data/json/itemgroups/roof.json index f005bd68bde8e..ad5b058031517 100644 --- a/data/json/itemgroups/roof.json +++ b/data/json/itemgroups/roof.json @@ -11,7 +11,7 @@ { "item": "mre_lemontuna_box", "prob": 5 }, { "item": "mre_asianbeef_box", "prob": 5 }, { "item": "ak47", "prob": 20 }, - { "item": "akmmag", "prob": 20 }, + { "item": "akmag30", "prob": 20 }, { "item": "762_m43", "prob": 20 }, { "item": "cig", "prob": 10 }, { "item": "joint_roach", "prob": 20 }, diff --git a/data/json/items/book/archery.json b/data/json/items/book/archery.json index 0f28f9d046a8e..3be60a342650e 100644 --- a/data/json/items/book/archery.json +++ b/data/json/items/book/archery.json @@ -7,7 +7,7 @@ "weight": "932 g", "volume": "1250 ml", "price": 2000, - "price_postapoc": 7500, + "price_postapoc": 500, "material": [ "paper" ], "symbol": "?", "color": "green", @@ -24,7 +24,7 @@ "weight": "60 g", "volume": "250 ml", "price": 480, - "price_postapoc": 5000, + "price_postapoc": 250, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -42,7 +42,7 @@ "weight": "1454 g", "volume": "1250 ml", "price": 1900, - "price_postapoc": 5000, + "price_postapoc": 500, "material": [ "paper" ], "symbol": "?", "color": "green", diff --git a/data/json/items/book/barter.json b/data/json/items/book/barter.json index ca288365d72c7..37393e07dee1d 100644 --- a/data/json/items/book/barter.json +++ b/data/json/items/book/barter.json @@ -7,7 +7,7 @@ "weight": "90 g", "volume": "250 ml", "price": 450, - "price_postapoc": 5000, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -24,7 +24,7 @@ "weight": "454 g", "volume": "750 ml", "price": 1900, - "price_postapoc": 5000, + "price_postapoc": 250, "material": [ "paper" ], "symbol": "?", "color": "green", @@ -43,7 +43,7 @@ "weight": "1587 g", "volume": "1750 ml", "price": 9800, - "price_postapoc": 2500, + "price_postapoc": 250, "bashing": 5, "material": [ "paper" ], "symbol": "?", diff --git a/data/json/items/book/bashing.json b/data/json/items/book/bashing.json index fbe71ee4d7306..a394d9e0129c9 100644 --- a/data/json/items/book/bashing.json +++ b/data/json/items/book/bashing.json @@ -7,7 +7,7 @@ "weight": "80 g", "volume": "250 ml", "price": 450, - "price_postapoc": 2000, + "price_postapoc": 500, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -25,7 +25,7 @@ "weight": "454 g", "volume": "250 ml", "price": 2000, - "price_postapoc": 5000, + "price_postapoc": 750, "material": [ "paper" ], "symbol": "?", "color": "green", diff --git a/data/json/items/book/computer.json b/data/json/items/book/computer.json index 8cae867a0877e..ebc298631579b 100644 --- a/data/json/items/book/computer.json +++ b/data/json/items/book/computer.json @@ -7,7 +7,7 @@ "weight": "1587 g", "volume": "1500 ml", "price": 7800, - "price_postapoc": 2500, + "price_postapoc": 500, "bashing": 6, "material": [ "paper" ], "symbol": "?", @@ -27,7 +27,7 @@ "weight": "1587 g", "volume": "1750 ml", "price": 7900, - "price_postapoc": 5000, + "price_postapoc": 250, "bashing": 5, "material": [ "paper" ], "symbol": "?", @@ -47,7 +47,7 @@ "weight": "454 g", "volume": "750 ml", "price": 1700, - "price_postapoc": 500, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "green", @@ -64,7 +64,7 @@ "weight": "80 g", "volume": "250 ml", "price": 450, - "price_postapoc": 5000, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -82,7 +82,7 @@ "weight": "462 g", "volume": "750 ml", "price": 5500, - "price_postapoc": 5000, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "green", @@ -99,7 +99,7 @@ "weight": "2206 g", "volume": "1750 ml", "price": 8500, - "price_postapoc": 10500, + "price_postapoc": 500, "bashing": 5, "material": [ "paper" ], "symbol": "?", diff --git a/data/json/items/book/cooking.json b/data/json/items/book/cooking.json index 3681c40c167e2..50fa9d01d438f 100644 --- a/data/json/items/book/cooking.json +++ b/data/json/items/book/cooking.json @@ -7,7 +7,7 @@ "weight": "1712 g", "volume": "2 L", "price": 7950, - "price_postapoc": 25000, + "price_postapoc": 750, "bashing": 5, "material": [ "paper" ], "symbol": "?", @@ -27,7 +27,7 @@ "weight": "1587 g", "volume": "1500 ml", "price": 4950, - "price_postapoc": 175000, + "price_postapoc": 1500, "bashing": 4, "material": [ "paper" ], "symbol": "?", @@ -47,7 +47,7 @@ "weight": "454 g", "volume": "1 L", "price": 1900, - "price_postapoc": 27500, + "price_postapoc": 500, "material": [ "paper" ], "symbol": "?", "color": "green", @@ -65,7 +65,7 @@ "weight": "454 g", "volume": "1 L", "price": 40000, - "price_postapoc": 50000, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "blue", @@ -84,7 +84,7 @@ "weight": "454 g", "volume": "1 L", "price": 2000, - "price_postapoc": 5500, + "price_postapoc": 750, "material": [ "paper" ], "symbol": "?", "color": "blue", @@ -102,7 +102,7 @@ "weight": "921 g", "volume": "750 ml", "price": 3500, - "price_postapoc": 7500, + "price_postapoc": 500, "bashing": 1, "material": "paper", "symbol": "?", @@ -121,7 +121,7 @@ "weight": "1887 g", "volume": "1250 ml", "price": 1950, - "price_postapoc": 6000, + "price_postapoc": 500, "bashing": 5, "material": [ "paper", "leather" ], "symbol": "?", @@ -141,7 +141,7 @@ "weight": "60 g", "volume": "250 ml", "price": 450, - "price_postapoc": 1200, + "price_postapoc": 500, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -159,7 +159,7 @@ "weight": "160 g", "volume": "500 ml", "price": 450, - "price_postapoc": 1200, + "price_postapoc": 250, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -177,7 +177,7 @@ "weight": "568 g", "volume": "750 ml", "price": 2000, - "price_postapoc": 5000, + "price_postapoc": 1250, "material": [ "paper", "leather" ], "symbol": "?", "color": "brown", @@ -195,7 +195,7 @@ "weight": "50 g", "volume": "500 ml", "price": 125000, - "price_postapoc": 1250000, + "price_postapoc": 2000, "material": [ "paper" ], "symbol": "?", "color": "light_green", @@ -214,7 +214,7 @@ "weight": "1700 g", "volume": "500 ml", "price": 50000, - "price_postapoc": 1250000, + "price_postapoc": 2000, "material": [ "paper" ], "symbol": "?", "color": "light_green", @@ -233,7 +233,7 @@ "weight": "50 g", "volume": "500 ml", "price": 125000, - "price_postapoc": 1250000, + "price_postapoc": 2000, "material": [ "paper" ], "symbol": "?", "color": "light_green", @@ -252,7 +252,7 @@ "weight": "1700 g", "volume": "500 ml", "price": 50000, - "price_postapoc": 1250000, + "price_postapoc": 2000, "material": [ "paper" ], "symbol": "?", "color": "light_green", @@ -271,7 +271,7 @@ "weight": "400 g", "volume": "750 ml", "price": 400, - "price_postapoc": 1250000, + "price_postapoc": 2000, "material": [ "paper", "plastic" ], "symbol": "?", "color": "light_green", @@ -290,7 +290,7 @@ "weight": "2000 g", "volume": "500 ml", "price": 64000, - "price_postapoc": 125000, + "price_postapoc": 2000, "material": [ "paper" ], "symbol": "?", "color": "light_green", @@ -309,7 +309,7 @@ "weight": "1700 g", "volume": "500 ml", "price": 50000, - "price_postapoc": 1250000, + "price_postapoc": 2000, "material": [ "paper" ], "symbol": "?", "color": "light_green", @@ -331,7 +331,7 @@ "weight": "1934 g", "volume": "1750 ml", "price": 62000, - "price_postapoc": 1250000, + "price_postapoc": 2000, "bashing": 5, "material": [ "paper", "plastic" ], "symbol": "?", @@ -351,7 +351,7 @@ "weight": "50 g", "volume": "500 ml", "price": 125000, - "price_postapoc": 1250000, + "price_postapoc": 2000, "material": [ "paper" ], "symbol": "?", "color": "light_green", @@ -370,7 +370,7 @@ "weight": "1700 g", "volume": "500 ml", "price": 50000, - "price_postapoc": 1250000, + "price_postapoc": 2000, "material": [ "paper" ], "symbol": "?", "color": "light_green", @@ -389,7 +389,7 @@ "weight": "5790 g", "volume": "1750 ml", "price": 9000, - "price_postapoc": 30000, + "price_postapoc": 2000, "bashing": 7, "material": [ "paper" ], "symbol": "?", @@ -410,7 +410,7 @@ "weight": "1887 g", "volume": "1250 ml", "price": 1950, - "price_postapoc": 7500, + "price_postapoc": 2000, "bashing": 5, "material": [ "paper", "leather" ], "symbol": "?", @@ -430,7 +430,7 @@ "weight": "1587 g", "volume": "2 L", "price": 7950, - "price_postapoc": 16000, + "price_postapoc": 2000, "bashing": 5, "material": [ "paper" ], "symbol": "?", @@ -450,7 +450,7 @@ "weight": "454 g", "volume": "1 L", "price": 1900, - "price_postapoc": 27500, + "price_postapoc": 750, "material": [ "paper" ], "symbol": "?", "color": "green", @@ -476,7 +476,7 @@ "weight": "454 g", "volume": "1 L", "price": 1900, - "price_postapoc": 43500, + "price_postapoc": 750, "material": [ "paper" ], "symbol": "?", "color": "green", @@ -494,7 +494,7 @@ "weight": "478 g", "volume": "1 L", "price": 1900, - "price_postapoc": 20500, + "price_postapoc": 750, "material": [ "paper" ], "symbol": "?", "color": "white", @@ -512,7 +512,7 @@ "weight": "600 g", "volume": "800 ml", "price": 1999, - "price_postapoc": 3000, + "price_postapoc": 500, "bashing": 2, "material": [ "paper" ], "symbol": "?", @@ -530,7 +530,7 @@ "description": "This cookbook contains many fanciful recipes. Some of them are even worth the trouble to actually prepare. Lovely pen and ink illustrations of overweight knights and gluttonous monks line the pages.", "volume": "900 ml", "price": 3000, - "price_postapoc": 4700, + "price_postapoc": 750, "max_level": 3, "time": "12 m", "fun": 1, @@ -543,6 +543,8 @@ "description": "This self-help book is as dubious as its title. Worse, it is boring. It does, however, contain a few basic cooking instructions.", "weight": "800 g", "volume": "1100 ml", + "price": 2500, + "price_postapoc": 750, "max_level": 1, "time": "16 m", "fun": -1, @@ -554,7 +556,7 @@ "name": { "str": "Food Fashions for Young Moderns", "str_pl": "copies of Food Fashions" }, "description": "A cookbook professing itself to be for those seeking \"daring and sophisticated flavors.\" The book exhorts the reader to defy convention and break the rules, and then presents a number of useful rules and conventions for preparing food.", "price": 3999, - "price_postapoc": 5000, + "price_postapoc": 750, "required_level": 2, "max_level": 4, "intelligence": 7, @@ -568,7 +570,7 @@ "weight": "454 g", "volume": "1 L", "price": 4000, - "price_postapoc": 31500, + "price_postapoc": 1000, "bashing": 2, "material": [ "paper" ], "symbol": "?", @@ -583,6 +585,7 @@ "type": "BOOK", "name": { "str": "You Can Can at Home", "str_pl": "copies of You Can Can at Home" }, "description": "This entry-level guide to home canning talks about the importance of acidity and food contents in preservation, and how to avoid contaminants in your canning batches.", + "price_postapoc": 1500, "copy-from": "mag_cooking" }, { @@ -590,6 +593,7 @@ "type": "BOOK", "name": { "str": "Can Sealer Instructions", "str_pl": "copies of Can Sealer Instructions" }, "description": "This dry guide to a home-use tin can sealer goes into clear detail on everything you can seal with the device and how to do it safely, and includes some basic recipes.", + "price_postapoc": 1500, "copy-from": "mag_cooking" }, { @@ -600,7 +604,7 @@ "weight": "1587 g", "volume": "1500 ml", "price": 4950, - "price_postapoc": 175000, + "price_postapoc": 750, "bashing": 4, "material": [ "paper" ], "symbol": "?", @@ -620,7 +624,7 @@ "weight": "1587 g", "volume": "1500 ml", "price": 4950, - "price_postapoc": 175000, + "price_postapoc": 500, "bashing": 4, "material": [ "paper" ], "symbol": "?", @@ -640,7 +644,7 @@ "weight": "454 g", "volume": "619 ml", "price": 1950, - "price_postapoc": 87600, + "price_postapoc": 1500, "bashing": 1, "material": [ "paper" ], "symbol": "?", @@ -660,7 +664,7 @@ "weight": "600 g", "volume": "800 ml", "price": 1050, - "price_postapoc": 4800, + "price_postapoc": 250, "material": [ "paper" ], "symbol": "?", "color": "light_gray", @@ -678,7 +682,7 @@ "weight": "100 g", "volume": "250 ml", "price": 3050, - "price_postapoc": 74800, + "price_postapoc": 1250, "material": [ "paper" ], "symbol": "?", "color": "light_gray", @@ -698,7 +702,7 @@ "weight": "2950 g", "volume": "3215 ml", "price": 6000, - "price_postapoc": 10000, + "price_postapoc": 750, "bashing": 7, "material": [ "paper" ], "symbol": "?", diff --git a/data/json/items/book/cutting.json b/data/json/items/book/cutting.json index 1d835f80c9d78..69208a21e132d 100644 --- a/data/json/items/book/cutting.json +++ b/data/json/items/book/cutting.json @@ -7,7 +7,7 @@ "weight": "80 g", "volume": "250 ml", "price": 450, - "price_postapoc": 1900, + "price_postapoc": 750, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -25,7 +25,7 @@ "weight": "454 g", "volume": "250 ml", "price": 2000, - "price_postapoc": 5600, + "price_postapoc": 750, "material": [ "paper" ], "symbol": "?", "color": "green", @@ -42,7 +42,7 @@ "weight": "454 g", "volume": "250 ml", "price": 5200, - "price_postapoc": 19000, + "price_postapoc": 1250, "material": [ "paper" ], "symbol": "?", "color": "blue", diff --git a/data/json/items/book/dodge.json b/data/json/items/book/dodge.json index 4d87ea352c5cc..1102081bece8e 100644 --- a/data/json/items/book/dodge.json +++ b/data/json/items/book/dodge.json @@ -7,7 +7,7 @@ "weight": "60 g", "volume": "250 ml", "price": 490, - "price_postapoc": 1700, + "price_postapoc": 250, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -25,7 +25,7 @@ "weight": "2330 g", "volume": "1250 ml", "price": 7200, - "price_postapoc": 18300, + "price_postapoc": 750, "material": [ "paper" ], "symbol": "?", "color": "green", @@ -42,7 +42,7 @@ "weight": "72 g", "volume": "250 ml", "price": 500, - "price_postapoc": 1300, + "price_postapoc": 500, "material": [ "paper" ], "symbol": "?", "color": "white", diff --git a/data/json/items/book/driving.json b/data/json/items/book/driving.json index fd2f10893f9ca..83c00b9b1e9f3 100644 --- a/data/json/items/book/driving.json +++ b/data/json/items/book/driving.json @@ -7,7 +7,7 @@ "weight": "220 g", "volume": "500 ml", "price": 2000, - "price_postapoc": 5200, + "price_postapoc": 250, "material": [ "paper" ], "symbol": "?", "color": "green", @@ -25,7 +25,7 @@ "weight": "60 g", "volume": "250 ml", "price": 450, - "price_postapoc": 1900, + "price_postapoc": 250, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -43,7 +43,7 @@ "weight": "404 g", "volume": "500 ml", "price": 2200, - "price_postapoc": 3500, + "price_postapoc": 250, "material": [ "paper" ], "symbol": "?", "color": "green", @@ -60,7 +60,7 @@ "weight": "223 g", "volume": "500 ml", "price": 5000, - "price_postapoc": 12000, + "price_postapoc": 2750, "material": [ "paper" ], "symbol": "?", "color": "green", diff --git a/data/json/items/book/electronics.json b/data/json/items/book/electronics.json index 24e0e52c85c0d..a75d36b7cc8ce 100644 --- a/data/json/items/book/electronics.json +++ b/data/json/items/book/electronics.json @@ -7,7 +7,7 @@ "weight": "1587 g", "volume": "1750 ml", "price": 8200, - "price_postapoc": 31500, + "price_postapoc": 750, "bashing": 5, "material": [ "paper" ], "symbol": "?", @@ -27,7 +27,7 @@ "weight": "45 g", "volume": "250 ml", "price": 450, - "price_postapoc": 3200, + "price_postapoc": 500, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -45,7 +45,7 @@ "weight": "454 g", "volume": "750 ml", "price": 2200, - "price_postapoc": 4700, + "price_postapoc": 250, "material": [ "paper" ], "symbol": "?", "color": "green", @@ -62,7 +62,7 @@ "weight": "1587 g", "volume": "1750 ml", "price": 3300, - "price_postapoc": 9900, + "price_postapoc": 250, "bashing": 5, "material": [ "paper" ], "symbol": "?", @@ -82,7 +82,7 @@ "weight": "10 g", "volume": "2 ml", "price": 40000, - "price_postapoc": 100000, + "price_postapoc": 1250, "material": [ "paper" ], "symbol": "?", "color": "light_green", @@ -101,7 +101,7 @@ "weight": "1909 g", "volume": "500 ml", "price": 3000, - "price_postapoc": 50000, + "price_postapoc": 750, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -120,7 +120,7 @@ "weight": "2000 g", "volume": "500 ml", "price": 56000, - "price_postapoc": 125000, + "price_postapoc": 2000, "material": [ "paper" ], "symbol": "?", "color": "light_green", @@ -139,7 +139,7 @@ "weight": "1409 g", "volume": "500 ml", "price": 74000, - "price_postapoc": 834000, + "price_postapoc": 2500, "material": [ "paper" ], "symbol": "?", "color": "light_green", @@ -158,7 +158,7 @@ "weight": "5 g", "volume": "250 ml", "price": 5000, - "price_postapoc": 19000, + "price_postapoc": 1000, "bashing": 1, "material": [ "paper" ], "symbol": "?", @@ -177,7 +177,7 @@ "weight": "1587 g", "volume": "1750 ml", "price": 9300, - "price_postapoc": 24500, + "price_postapoc": 2000, "bashing": 5, "material": [ "paper" ], "symbol": "?", @@ -197,7 +197,7 @@ "weight": "2063 g", "volume": "2 L", "price": 9200, - "price_postapoc": 19000, + "price_postapoc": 750, "bashing": 8, "material": [ "paper" ], "symbol": "?", @@ -217,7 +217,7 @@ "weight": "30 g", "volume": "250 ml", "price": 100000, - "price_postapoc": 100000, + "price_postapoc": 750, "to_hit": -1, "material": "paper", "skill": "electronics", diff --git a/data/json/items/book/fabrication.json b/data/json/items/book/fabrication.json index 619f436e27893..6dd65e0efc41a 100644 --- a/data/json/items/book/fabrication.json +++ b/data/json/items/book/fabrication.json @@ -7,7 +7,7 @@ "weight": "1620 g", "volume": "1250 ml", "price": 4500, - "price_postapoc": 16400, + "price_postapoc": 250, "bashing": 4, "material": [ "paper" ], "symbol": "?", @@ -26,7 +26,7 @@ "weight": "600 g", "volume": "1250 ml", "price": 2000, - "price_postapoc": 12300, + "price_postapoc": 250, "material": [ "paper" ], "symbol": "?", "color": "blue", @@ -44,7 +44,7 @@ "weight": "60 g", "volume": "250 ml", "price": 450, - "price_postapoc": 1600, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -62,7 +62,7 @@ "weight": "510 g", "volume": "750 ml", "price": 2200, - "price_postapoc": 1900, + "price_postapoc": 500, "material": [ "paper" ], "symbol": "?", "color": "green", @@ -80,7 +80,7 @@ "weight": "1454 g", "volume": "1250 ml", "price": 4800, - "price_postapoc": 9700, + "price_postapoc": 1250, "material": [ "paper" ], "symbol": "?", "color": "blue", @@ -98,7 +98,7 @@ "weight": "1454 g", "volume": "1250 ml", "price": 4800, - "price_postapoc": 9800, + "price_postapoc": 1500, "material": [ "paper" ], "symbol": "?", "color": "blue", @@ -116,7 +116,7 @@ "weight": "1454 g", "volume": "1500 ml", "price": 12000, - "price_postapoc": 29000, + "price_postapoc": 1750, "material": [ "paper" ], "symbol": "?", "color": "blue", @@ -134,7 +134,7 @@ "weight": "1409 g", "volume": "500 ml", "price": 84000, - "price_postapoc": 190000, + "price_postapoc": 2500, "material": [ "paper" ], "symbol": "?", "color": "light_green", @@ -153,7 +153,7 @@ "weight": "2000 g", "volume": "500 ml", "price": 50000, - "price_postapoc": 150000, + "price_postapoc": 2000, "material": [ "paper" ], "symbol": "?", "color": "light_green", @@ -172,7 +172,7 @@ "weight": "954 g", "volume": "1500 ml", "price": 8300, - "price_postapoc": 29000, + "price_postapoc": 1750, "material": [ "paper" ], "symbol": "?", "color": "blue", @@ -208,7 +208,7 @@ "weight": "654 g", "volume": "1250 ml", "price": 6400, - "price_postapoc": 19000, + "price_postapoc": 2250, "material": [ "paper" ], "symbol": "?", "color": "blue", @@ -227,7 +227,7 @@ "weight": "654 g", "volume": "1250 ml", "price": 6400, - "price_postapoc": 19000, + "price_postapoc": 2750, "material": "paper", "symbol": "?", "color": "blue", @@ -246,7 +246,7 @@ "weight": "654 g", "volume": "1250 ml", "price": 6400, - "price_postapoc": 19000, + "price_postapoc": 3000, "material": [ "paper" ], "symbol": "?", "color": "blue", @@ -265,7 +265,7 @@ "weight": "2100 g", "volume": "1750 ml", "price": 4500, - "price_postapoc": 9400, + "price_postapoc": 750, "bashing": 4, "material": [ "paper" ], "symbol": "?", @@ -284,7 +284,7 @@ "weight": "528 g", "volume": "1 L", "price": 6500, - "price_postapoc": 20000, + "price_postapoc": 1250, "material": [ "paper" ], "symbol": "?", "color": "blue", @@ -302,7 +302,7 @@ "weight": "854 g", "volume": "1500 ml", "price": 400, - "price_postapoc": 45000, + "price_postapoc": 1000, "material": [ "paper" ], "symbol": "?", "color": "blue", @@ -321,7 +321,7 @@ "weight": "654 g", "volume": "1250 ml", "price": 6400, - "price_postapoc": 19000, + "price_postapoc": 2500, "material": [ "paper" ], "symbol": "?", "color": "blue", @@ -340,7 +340,7 @@ "weight": "654 g", "volume": "1250 ml", "price": 6400, - "price_postapoc": 19000, + "price_postapoc": 3000, "material": [ "paper" ], "symbol": "?", "color": "blue", @@ -359,7 +359,7 @@ "weight": "2100 g", "volume": "1750 ml", "price": 6500, - "price_postapoc": 17800, + "price_postapoc": 1500, "bashing": 4, "material": [ "paper" ], "symbol": "?", @@ -378,7 +378,7 @@ "weight": "454 g", "volume": "500 ml", "price": 1800, - "price_postapoc": 14700, + "price_postapoc": 750, "material": [ "paper" ], "symbol": "?", "color": "green", @@ -395,7 +395,7 @@ "weight": "2490 g", "volume": "2 L", "price": 8200, - "price_postapoc": 21500, + "price_postapoc": 1000, "bashing": 8, "material": [ "paper" ], "symbol": "?", @@ -415,7 +415,7 @@ "weight": "60 g", "volume": "250 ml", "price": 450, - "price_postapoc": 1900, + "price_postapoc": 250, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -433,7 +433,7 @@ "weight": "454 g", "volume": "500 ml", "price": 2200, - "price_postapoc": 4800, + "price_postapoc": 500, "material": [ "paper" ], "symbol": "?", "color": "green", @@ -450,7 +450,7 @@ "weight": "1587 g", "volume": "1500 ml", "price": 6500, - "price_postapoc": 45000, + "price_postapoc": 1000, "bashing": 4, "material": [ "paper" ], "symbol": "?", @@ -470,7 +470,7 @@ "weight": "454 g", "volume": "500 ml", "price": 8000, - "price_postapoc": 50000, + "price_postapoc": 1500, "bashing": 7, "material": [ "paper" ], "symbol": "?", @@ -487,7 +487,7 @@ "weight": "600 g", "volume": "1250 ml", "price": 4000, - "price_postapoc": 24000, + "price_postapoc": 750, "bashing": 4, "material": [ "paper" ], "symbol": "?", diff --git a/data/json/items/book/firstaid.json b/data/json/items/book/firstaid.json index d377313f3d07e..b2920e02f7acc 100644 --- a/data/json/items/book/firstaid.json +++ b/data/json/items/book/firstaid.json @@ -7,7 +7,7 @@ "weight": "2063 g", "volume": "2 L", "price": 9200, - "price_postapoc": 17500, + "price_postapoc": 1500, "bashing": 8, "material": [ "paper" ], "symbol": "?", @@ -27,7 +27,7 @@ "weight": "60 g", "volume": "250 ml", "price": 480, - "price_postapoc": 8900, + "price_postapoc": 250, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -45,7 +45,7 @@ "weight": "454 g", "volume": "1250 ml", "price": 2500, - "price_postapoc": 22500, + "price_postapoc": 1250, "material": [ "paper" ], "symbol": "?", "color": "green", @@ -62,7 +62,7 @@ "weight": "192 g", "volume": "250 ml", "price": 4000, - "price_postapoc": 10000, + "price_postapoc": 750, "material": [ "paper", "leather" ], "symbol": "?", "color": "green", @@ -80,7 +80,7 @@ "weight": "1360 g", "volume": "2 L", "price": 8500, - "price_postapoc": 30000, + "price_postapoc": 1250, "bashing": 4, "material": [ "paper" ], "symbol": "?", @@ -99,7 +99,7 @@ "weight": "60 g", "volume": "250 ml", "price": 480, - "price_postapoc": 1900, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -116,7 +116,7 @@ "weight": "2268 g", "volume": "500 ml", "price": 10000, - "price_postapoc": 190000, + "price_postapoc": 2250, "bashing": 7, "material": [ "paper" ], "symbol": "?", @@ -133,7 +133,7 @@ "weight": "5790 g", "volume": "500 ml", "price": 8000, - "price_postapoc": 50000, + "price_postapoc": 750, "bashing": 7, "material": [ "paper" ], "symbol": "?", diff --git a/data/json/items/book/gun.json b/data/json/items/book/gun.json index c6dc427b66eb0..141c3f77951eb 100644 --- a/data/json/items/book/gun.json +++ b/data/json/items/book/gun.json @@ -7,7 +7,7 @@ "weight": "60 g", "volume": "250 ml", "price": 480, - "price_postapoc": 1900, + "price_postapoc": 500, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -25,7 +25,7 @@ "weight": "462 g", "volume": "500 ml", "price": 3800, - "price_postapoc": 10000, + "price_postapoc": 1250, "material": [ "paper" ], "symbol": "?", "color": "green", @@ -42,7 +42,7 @@ "weight": "226 g", "volume": "250 ml", "price": 4000, - "price_postapoc": 12000, + "price_postapoc": 500, "material": [ "paper", "leather" ], "symbol": "?", "color": "green", diff --git a/data/json/items/book/launcher.json b/data/json/items/book/launcher.json index a8ac9ee8d3ef6..eaa27b3021619 100644 --- a/data/json/items/book/launcher.json +++ b/data/json/items/book/launcher.json @@ -7,7 +7,7 @@ "weight": "90 g", "volume": "250 ml", "price": 450, - "price_postapoc": 1900, + "price_postapoc": 1250, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -25,7 +25,7 @@ "weight": "734 g", "volume": "250 ml", "price": 2000, - "price_postapoc": 7600, + "price_postapoc": 2000, "material": [ "paper" ], "symbol": "?", "color": "green", diff --git a/data/json/items/book/maps.json b/data/json/items/book/maps.json index a599ac57fc740..f70532dcce629 100644 --- a/data/json/items/book/maps.json +++ b/data/json/items/book/maps.json @@ -8,7 +8,7 @@ "weight": "30 g", "volume": "250 ml", "price": 1000, - "price_postapoc": 4000, + "price_postapoc": 1000, "to_hit": -1, "material": "paper", "symbol": ";", diff --git a/data/json/items/book/martial.json b/data/json/items/book/martial.json index f38542d2bd578..a2af958b11086 100644 --- a/data/json/items/book/martial.json +++ b/data/json/items/book/martial.json @@ -4,6 +4,7 @@ "copy-from": "book_martial", "type": "GENERIC", "name": { "str": "The Spirit of Aikido", "str_pl": "The Spirit of Aikido" }, + "price_postapoc": 2000, "description": "A complete guide to Aikido.", "book_data": { "martial_art": "style_aikido" } }, @@ -12,6 +13,7 @@ "copy-from": "book_martial", "type": "GENERIC", "name": { "str": "Practical Pugilism", "str_pl": "Practical Pugilism" }, + "price_postapoc": 2000, "description": "A complete guide to boxing. Let's get ready to rough-up some ruffians!", "book_data": { "martial_art": "style_boxing" } }, @@ -20,6 +22,7 @@ "copy-from": "book_martial", "type": "GENERIC", "name": { "str": "Capoeira 100", "str_pl": "Capoeira 100" }, + "price_postapoc": 2000, "description": "A complete guide to Capoeira.", "book_data": { "martial_art": "style_capoeira" } }, @@ -28,6 +31,7 @@ "copy-from": "book_martial", "type": "GENERIC", "name": { "str": "The Centipede Lu Feng", "str_pl": "The Centipede Lu Feng" }, + "price_postapoc": 2000, "description": "A complete guide to Centipede Kung Fu.", "book_data": { "martial_art": "style_centipede" } }, @@ -36,6 +40,7 @@ "copy-from": "book_martial", "type": "GENERIC", "name": { "str": "The Red Crane", "str_pl": "The Red Crane" }, + "price_postapoc": 2000, "description": "A complete guide to Crane Kung Fu.", "book_data": { "martial_art": "style_crane" } }, @@ -44,6 +49,7 @@ "copy-from": "book_martial", "type": "GENERIC", "name": { "str": "The Jade Dragon", "str_pl": "The Jade Dragon" }, + "price_postapoc": 2000, "description": "A complete guide to Dragon Kung Fu.", "book_data": { "martial_art": "style_dragon" } }, @@ -52,6 +58,7 @@ "copy-from": "book_martial", "type": "GENERIC", "name": { "str": "Practical Eskrima", "str_pl": "Practical Eskrima" }, + "price_postapoc": 3000, "description": "A complete guide to Eskrima.", "book_data": { "martial_art": "style_eskrima" } }, @@ -60,6 +67,7 @@ "copy-from": "book_martial", "type": "GENERIC", "name": { "str": "The Modern Swordsman", "str_pl": "The Modern Swordsman" }, + "price_postapoc": 3000, "description": "A complete guide to Fencing.", "book_data": { "martial_art": "style_fencing" } }, @@ -68,6 +76,7 @@ "copy-from": "book_martial", "type": "GENERIC", "name": { "str": "Kodokan Judo", "str_pl": "Kodokan Judo" }, + "price_postapoc": 2000, "description": "A complete guide to Judo.", "book_data": { "martial_art": "style_judo" } }, @@ -76,6 +85,7 @@ "copy-from": "book_martial", "type": "GENERIC", "name": { "str": "The Shotokan Karate Handbook", "str_pl": "The Shotokan Karate Handbook" }, + "price_postapoc": 2000, "description": "A complete guide to Shotokan Karate.", "book_data": { "martial_art": "style_karate" } }, @@ -84,6 +94,7 @@ "copy-from": "book_martial", "type": "GENERIC", "name": { "str": "Complete Krav Maga", "str_pl": "Complete Krav Maga" }, + "price_postapoc": 2000, "description": "A complete guide to Krav Maga.", "book_data": { "martial_art": "style_krav_maga" } }, @@ -92,6 +103,7 @@ "copy-from": "book_martial", "type": "GENERIC", "name": { "str": "The Deaf Leopard", "str_pl": "The Deaf Leopard" }, + "price_postapoc": 2000, "description": "A complete guide to Leopard Kung Fu.", "book_data": { "martial_art": "style_leopard" } }, @@ -100,6 +112,7 @@ "copy-from": "book_martial", "type": "GENERIC", "name": { "str": "The Lizard Kuo Chui", "str_pl": "The Lizard Kuo Chui" }, + "price_postapoc": 2000, "description": "A complete guide to Lizard Kung Fu.", "book_data": { "martial_art": "style_lizard" } }, @@ -108,6 +121,7 @@ "copy-from": "book_martial", "type": "GENERIC", "name": { "str": "Ultimate Muay Thai", "str_pl": "Ultimate Muay Thai" }, + "price_postapoc": 2000, "description": "A complete guide to Muay Thai.", "book_data": { "martial_art": "style_muay_thai" } }, @@ -116,6 +130,7 @@ "copy-from": "book_martial", "type": "GENERIC", "name": { "str": "Essence of Ninjutsu", "str_pl": "Essence of Ninjutsu" }, + "price_postapoc": 3000, "description": "A complete guide to Ninjutsu.", "book_data": { "martial_art": "style_ninjutsu" } }, @@ -124,6 +139,7 @@ "copy-from": "book_martial", "type": "GENERIC", "name": { "str": "The Book of Five Rings", "str_pl": "The Book of Five Rings" }, + "price_postapoc": 3000, "description": "A primer on Miyamoto Musashi's style of combat and philosophy, Niten Ichi-Ryu.", "book_data": { "martial_art": "style_niten" } }, @@ -132,6 +148,7 @@ "copy-from": "book_martial", "type": "GENERIC", "name": { "str": "The Modern Pankratiast", "str_pl": "The Modern Pankratiast" }, + "price_postapoc": 2000, "description": "A complete guide to Pankration.", "book_data": { "martial_art": "style_pankration" } }, @@ -140,6 +157,7 @@ "copy-from": "book_martial", "type": "GENERIC", "name": { "str": "The Scorpion Sun Chien", "str_pl": "The Scorpion Sun Chien" }, + "price_postapoc": 2000, "description": "A complete guide to Scorpion Kung Fu.", "book_data": { "martial_art": "style_scorpion" } }, @@ -148,6 +166,7 @@ "copy-from": "book_martial", "type": "GENERIC", "name": { "str": "The Indonesian Warrior", "str_pl": "The Indonesian Warrior" }, + "price_postapoc": 3000, "description": "A complete guide to Pentjak Silat.", "book_data": { "martial_art": "style_silat" } }, @@ -156,6 +175,7 @@ "copy-from": "book_martial", "type": "GENERIC", "name": { "str": "The Black Snake", "str_pl": "The Black Snake" }, + "price_postapoc": 2000, "description": "A complete guide to Snake Kung Fu.", "book_data": { "martial_art": "style_snake" } }, @@ -164,6 +184,7 @@ "copy-from": "book_martial", "type": "GENERIC", "name": { "str": "Official Taekwondo Training Manual", "str_pl": "Official Taekwondo Training Manual" }, + "price_postapoc": 2000, "description": "A complete guide to Taekwondo.", "book_data": { "martial_art": "style_taekwondo" } }, @@ -172,6 +193,7 @@ "copy-from": "book_martial", "type": "GENERIC", "name": { "str": "Becoming One with the Tao", "str_pl": "Becoming One with the Tao" }, + "price_postapoc": 2000, "description": "A complete guide to T'ai Chi Ch'uan.", "book_data": { "martial_art": "style_tai_chi" } }, @@ -180,6 +202,7 @@ "copy-from": "book_martial", "type": "GENERIC", "name": { "str": "The White Tiger", "str_pl": "The White Tiger" }, + "price_postapoc": 2000, "description": "A complete guide to Tiger Kung Fu.", "book_data": { "martial_art": "style_tiger" } }, @@ -188,6 +211,7 @@ "copy-from": "book_martial", "type": "GENERIC", "name": { "str": "The Toad Lo Mang", "str_pl": "The Toad Lo Mang" }, + "price_postapoc": 2000, "description": "A complete guide to Toad Kung Fu.", "book_data": { "martial_art": "style_toad" } }, @@ -196,6 +220,7 @@ "copy-from": "book_martial", "type": "GENERIC", "name": { "str": "The Viper Wei Pai", "str_pl": "The Viper Wei Pai" }, + "price_postapoc": 2000, "description": "A complete guide to Viper Kung Fu.", "book_data": { "martial_art": "style_venom_snake" } }, @@ -204,6 +229,7 @@ "copy-from": "book_martial", "type": "GENERIC", "name": { "str": "Zui Quan and You", "str_pl": "Zui Quan and You" }, + "price_postapoc": 2000, "description": "A complete guide to Zui Quan.", "book_data": { "martial_art": "style_zui_quan" } }, @@ -212,6 +238,7 @@ "copy-from": "book_martial", "type": "GENERIC", "name": { "str": "The Way of the Spear", "str_pl": "The Way of the Spear" }, + "price_postapoc": 3000, "description": "A complete guide to Sōjutsu.", "book_data": { "martial_art": "style_sojutsu" } }, @@ -220,6 +247,7 @@ "copy-from": "book_martial", "type": "GENERIC", "name": { "str": "Beautiful Springtime", "str_pl": "Beautiful Springtime" }, + "price_postapoc": 2000, "description": "A complete guide to Wing Chun Kung-fu.", "book_data": { "martial_art": "style_wingchun" } }, @@ -228,6 +256,7 @@ "copy-from": "book_martial", "type": "GENERIC", "name": { "str": "Fior Di Battaglia", "str_pl": "Fior Di Battaglia" }, + "price_postapoc": 3000, "description": "A completely translated medieval guide teaching various techniques with polearms, there is a chapter about the many variations of common polearms… there are even pictures!", "book_data": { "martial_art": "style_medievalpole" } }, @@ -236,6 +265,7 @@ "copy-from": "book_martial", "type": "GENERIC", "name": { "str": "Historic European Swordfighting", "str_pl": "Historic European Swordfighting" }, + "price_postapoc": 3000, "description": "A complete guide to medieval swordsmanship. Compares the German and Italian traditions for longsword and side sword, in and out of armor, with and without shield.", "book_data": { "martial_art": "style_swordsmanship" } } diff --git a/data/json/items/book/mechanics.json b/data/json/items/book/mechanics.json index b6a2e869d53ae..f608e0d87afcc 100644 --- a/data/json/items/book/mechanics.json +++ b/data/json/items/book/mechanics.json @@ -7,7 +7,7 @@ "weight": "1587 g", "volume": "1500 ml", "price": 5950, - "price_postapoc": 16000, + "price_postapoc": 2250, "bashing": 4, "material": [ "paper" ], "symbol": "?", @@ -24,6 +24,7 @@ "copy-from": "book_magazine", "type": "BOOK", "name": { "str": "army improvised field repairs manual" }, + "price_postapoc": 500, "description": "A compact manual with faded print detailing a number of improvised field repairs that can be made to vehicles.", "skill": "mechanics" }, @@ -35,7 +36,7 @@ "weight": "70 g", "volume": "250 ml", "price": 450, - "price_postapoc": 1900, + "price_postapoc": 500, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -53,7 +54,7 @@ "weight": "454 g", "volume": "750 ml", "price": 5500, - "price_postapoc": 23000, + "price_postapoc": 500, "material": [ "paper" ], "symbol": "?", "color": "green", @@ -67,6 +68,7 @@ "type": "BOOK", "copy-from": "recipe_lab_cvd", "name": { "str": "lab journal-Curie", "str_pl": "lab journals-Curie" }, + "price_postapoc": 2000, "description": "This lab notebook is filled with the collective discoveries and refinements of a research team dedicated to nuclear energy. You don't think you're ready to start a second Cataclysm, but the general information provided might be useful…", "skill": "mechanics", "required_level": 6 @@ -79,7 +81,7 @@ "weight": "1200 g", "volume": "2 L", "price": 1500, - "price_postapoc": 24000, + "price_postapoc": 2500, "bashing": 4, "material": [ "paper" ], "symbol": "?", @@ -98,7 +100,7 @@ "weight": "1587 g", "volume": "1500 ml", "price": 4950, - "price_postapoc": 18000, + "price_postapoc": 500, "bashing": 4, "material": [ "paper" ], "symbol": "?", diff --git a/data/json/items/book/melee.json b/data/json/items/book/melee.json index d04e6eee75e83..0b49737989d74 100644 --- a/data/json/items/book/melee.json +++ b/data/json/items/book/melee.json @@ -7,7 +7,7 @@ "weight": "70 g", "volume": "250 ml", "price": 450, - "price_postapoc": 1900, + "price_postapoc": 750, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -25,7 +25,7 @@ "weight": "564 g", "volume": "250 ml", "price": 2000, - "price_postapoc": 9600, + "price_postapoc": 1250, "material": [ "paper" ], "symbol": "?", "color": "green", diff --git a/data/json/items/book/misc.json b/data/json/items/book/misc.json index d9be5c37d6fa3..eb9eb8370f38d 100644 --- a/data/json/items/book/misc.json +++ b/data/json/items/book/misc.json @@ -7,7 +7,7 @@ "weight": "371 g", "volume": "700 ml", "price": 750, - "price_postapoc": 1900, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "looks_like": "story_book", @@ -26,7 +26,7 @@ "weight": "227 g", "volume": "1 L", "price": 1290, - "price_postapoc": 700, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "green", @@ -44,7 +44,7 @@ "weight": "566 g", "volume": "1250 ml", "price": 5000, - "price_postapoc": 5000, + "price_postapoc": 50, "bashing": 5, "material": [ "paper" ], "symbol": "?", @@ -61,7 +61,7 @@ "weight": "52 g", "volume": "250 ml", "price": 550, - "price_postapoc": 1900, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "light_cyan", @@ -77,7 +77,7 @@ "weight": "1 g", "volume": "250 ml", "price": 3000, - "price_postapoc": 1900, + "price_postapoc": 50, "bashing": 1, "material": [ "paper" ], "symbol": "?", @@ -93,7 +93,7 @@ "weight": "400 g", "volume": "750 ml", "price": 400, - "price_postapoc": 400, + "price_postapoc": 50, "material": [ "paper", "plastic" ], "symbol": "?", "color": "light_green", @@ -109,7 +109,7 @@ "weight": "700 g", "volume": "750 ml", "price": 1250, - "price_postapoc": 1900, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "light_blue", @@ -126,7 +126,7 @@ "weight": "410 g", "volume": "750 ml", "price": 950, - "price_postapoc": 1900, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "light_blue", @@ -224,7 +224,7 @@ "weight": "1764 g", "volume": "1 L", "price": 88200, - "price_postapoc": 88200, + "price_postapoc": 50, "bashing": 2, "material": [ "paper" ], "symbol": "?", @@ -240,7 +240,7 @@ "weight": "368 g", "volume": "1 L", "price": 550, - "price_postapoc": 550, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "cyan", @@ -257,7 +257,7 @@ "weight": "368 g", "volume": "1 L", "price": 550, - "price_postapoc": 550, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "dark_gray", @@ -274,7 +274,7 @@ "weight": "428 g", "volume": "1250 ml", "price": 550, - "price_postapoc": 550, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "dark_gray", @@ -291,7 +291,7 @@ "weight": "368 g", "volume": "1 L", "price": 550, - "price_postapoc": 550, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "dark_gray", @@ -308,7 +308,7 @@ "weight": "590 g", "volume": "1 L", "price": 550, - "price_postapoc": 550, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "dark_gray", @@ -325,7 +325,7 @@ "weight": "398 g", "volume": "500 ml", "price": 550, - "price_postapoc": 550, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "dark_gray", @@ -342,7 +342,7 @@ "weight": "292 g", "volume": "150 ml", "price": 550, - "price_postapoc": 2323, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "dark_gray", @@ -359,7 +359,7 @@ "weight": "368 g", "volume": "600 ml", "price": 550, - "price_postapoc": 550, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "dark_gray", @@ -376,7 +376,7 @@ "weight": "368 g", "volume": "600 ml", "price": 550, - "price_postapoc": 550, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "dark_gray", @@ -396,7 +396,7 @@ "weight": "292 g", "volume": "500 ml", "price": 550, - "price_postapoc": 550, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "dark_gray", @@ -413,7 +413,7 @@ "weight": "412 g", "volume": "600 ml", "price": 550, - "price_postapoc": 550, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "dark_gray", @@ -430,7 +430,7 @@ "weight": "486 g", "volume": "1300 ml", "price": 550, - "price_postapoc": 550, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "dark_gray", @@ -447,7 +447,7 @@ "weight": "292 g", "volume": "600 ml", "price": 550, - "price_postapoc": 550, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "dark_gray", @@ -464,7 +464,7 @@ "weight": "496 g", "volume": "1 L", "price": 550, - "price_postapoc": 550, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "dark_gray", @@ -481,7 +481,7 @@ "weight": "460 g", "volume": "1 L", "price": 550, - "price_postapoc": 550, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "dark_gray", @@ -498,7 +498,7 @@ "weight": "512 g", "volume": "1800 ml", "price": 550, - "price_postapoc": 550, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "dark_gray", @@ -515,7 +515,7 @@ "weight": "513 g", "volume": "1 L", "price": 550, - "price_postapoc": 550, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "dark_gray", @@ -532,7 +532,7 @@ "weight": "482 g", "volume": "750 ml", "price": 550, - "price_postapoc": 550, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "dark_gray", @@ -549,7 +549,7 @@ "weight": "540 g", "volume": "1700 ml", "price": 550, - "price_postapoc": 550, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "dark_gray", @@ -566,7 +566,7 @@ "weight": "130 g", "volume": "250 ml", "price": 550, - "price_postapoc": 550, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "dark_gray", @@ -583,7 +583,7 @@ "weight": "60 g", "volume": "250 ml", "price": 300, - "price_postapoc": 900, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "light_cyan", @@ -598,7 +598,7 @@ "weight": "60 g", "volume": "250 ml", "price": 300, - "price_postapoc": 900, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -614,7 +614,7 @@ "weight": "60 g", "volume": "250 ml", "price": 400, - "price_postapoc": 100, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -630,7 +630,7 @@ "weight": "60 g", "volume": "250 ml", "price": 400, - "price_postapoc": 1200, + "price_postapoc": 250, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -646,7 +646,7 @@ "weight": "1 g", "volume": "250 ml", "price": 3000, - "price_postapoc": 3000, + "price_postapoc": 50, "bashing": 1, "material": [ "paper" ], "symbol": "?", @@ -662,7 +662,7 @@ "weight": "80 g", "volume": "250 ml", "price": 350, - "price_postapoc": 100, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -677,6 +677,7 @@ "description": "The stirring tale of a race against time, in search of a lost city located in the dark heart of the African continent.", "copy-from": "paperback_novel", "price": 850, + "price_postapoc": 50, "time": "20 m", "fun": 3 }, @@ -699,7 +700,7 @@ "weight": "187 g", "volume": "500 ml", "price": 750, - "price_postapoc": 1400, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "light_blue", @@ -724,7 +725,7 @@ "weight": "227 g", "volume": "750 ml", "price": 850, - "price_postapoc": 1900, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "light_blue", @@ -854,7 +855,7 @@ "weight": "322 g", "volume": "750 ml", "price": 750, - "price_postapoc": 1900, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "light_blue", @@ -871,7 +872,7 @@ "weight": "520 g", "volume": "750 ml", "price": 850, - "price_postapoc": 1900, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "light_blue", @@ -888,7 +889,7 @@ "weight": "227 g", "volume": "750 ml", "price": 850, - "price_postapoc": 1900, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "light_blue", @@ -1120,6 +1121,7 @@ "description": "A thrilling narrative of survival in a prisoner of war camp during the Second World War, filled with riveting subplots about rat farming and dysentery.", "copy-from": "paperback_novel", "weight": "686 g", + "price_postapoc": 50, "intelligence": 7, "time": "20 m", "chapters": 28, @@ -1301,7 +1303,7 @@ "weight": "350 g", "volume": "750 ml", "price": 1250, - "price_postapoc": 1900, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "light_blue", @@ -1318,7 +1320,7 @@ "weight": "854 g", "volume": "2500 ml", "price": 800, - "price_postapoc": 900, + "price_postapoc": 50, "bashing": 2, "material": [ "paper" ], "symbol": "?", @@ -1336,7 +1338,7 @@ "weight": "180 g", "volume": "250 ml", "price": 3000, - "price_postapoc": 3000, + "price_postapoc": 50, "material": [ "paper", "leather" ], "symbol": "?", "color": "light_gray", @@ -1353,7 +1355,7 @@ "weight": "700 g", "volume": "750 ml", "price": 1150, - "price_postapoc": 1900, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "light_blue", @@ -1370,7 +1372,7 @@ "weight": "400 g", "volume": "500 ml", "price": 1050, - "price_postapoc": 1900, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "light_blue", @@ -1387,7 +1389,7 @@ "weight": "340 g", "volume": "750 ml", "price": 1500, - "price_postapoc": 1900, + "price_postapoc": 50, "bashing": 3, "material": [ "paper" ], "symbol": "?", @@ -1405,7 +1407,7 @@ "weight": "566 g", "volume": "1250 ml", "price": 2000, - "price_postapoc": 1900, + "price_postapoc": 50, "bashing": 5, "material": [ "paper" ], "symbol": "?", @@ -1422,7 +1424,7 @@ "weight": "680 g", "volume": "1500 ml", "price": 500, - "price_postapoc": 1900, + "price_postapoc": 50, "bashing": 6, "material": [ "paper" ], "symbol": "?", @@ -1439,7 +1441,7 @@ "weight": "454 g", "volume": "1750 ml", "price": 500, - "price_postapoc": 1900, + "price_postapoc": 50, "bashing": 7, "material": [ "paper" ], "symbol": "?", @@ -1456,7 +1458,7 @@ "weight": "1720 g", "volume": "1 L", "price": 1400, - "price_postapoc": 1900, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "light_blue", @@ -1473,7 +1475,7 @@ "weight": "360 g", "volume": "750 ml", "price": 1050, - "price_postapoc": 1900, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "light_blue", @@ -1490,7 +1492,7 @@ "weight": "227 g", "volume": "750 ml", "price": 2900, - "price_postapoc": 1900, + "price_postapoc": 50, "bashing": 3, "material": [ "paper" ], "symbol": "?", @@ -1508,7 +1510,7 @@ "weight": "292 g", "volume": "750 ml", "price": 550, - "price_postapoc": 550, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "dark_gray", @@ -1623,7 +1625,7 @@ "weight": "350 g", "volume": "750 ml", "price": 2000, - "price_postapoc": 1900, + "price_postapoc": 50, "material": [ "paper" ], "looks_like": "tall_tales", "color": "light_blue", @@ -1718,7 +1720,7 @@ "weight": "400 g", "volume": "750 ml", "price": 4550, - "price_postapoc": 4550, + "price_postapoc": 50, "material": [ "paper" ], "looks_like": "tall_tales", "color": "light_blue", diff --git a/data/json/items/book/pistol.json b/data/json/items/book/pistol.json index fd430f258c2c5..715792f134529 100644 --- a/data/json/items/book/pistol.json +++ b/data/json/items/book/pistol.json @@ -7,7 +7,7 @@ "weight": "90 g", "volume": "250 ml", "price": 450, - "price_postapoc": 1400, + "price_postapoc": 750, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -25,7 +25,7 @@ "weight": "440 g", "volume": "500 ml", "price": 2200, - "price_postapoc": 7600, + "price_postapoc": 1250, "material": [ "paper" ], "symbol": "?", "color": "green", diff --git a/data/json/items/book/rifle.json b/data/json/items/book/rifle.json index 5390ab0eba600..6339fabacc7b5 100644 --- a/data/json/items/book/rifle.json +++ b/data/json/items/book/rifle.json @@ -7,7 +7,7 @@ "weight": "100 g", "volume": "250 ml", "price": 450, - "price_postapoc": 1900, + "price_postapoc": 750, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -25,7 +25,7 @@ "weight": "454 g", "volume": "250 ml", "price": 2000, - "price_postapoc": 8600, + "price_postapoc": 1250, "material": [ "paper" ], "symbol": "?", "color": "green", diff --git a/data/json/items/book/shotgun.json b/data/json/items/book/shotgun.json index bfab71b29a5a4..54203e0242f71 100644 --- a/data/json/items/book/shotgun.json +++ b/data/json/items/book/shotgun.json @@ -7,7 +7,7 @@ "weight": "90 g", "volume": "250 ml", "price": 450, - "price_postapoc": 1900, + "price_postapoc": 750, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -25,7 +25,7 @@ "weight": "400 g", "volume": "500 ml", "price": 2100, - "price_postapoc": 4500, + "price_postapoc": 1250, "material": [ "paper" ], "symbol": "?", "color": "green", diff --git a/data/json/items/book/smg.json b/data/json/items/book/smg.json index 933ce61edc86e..34ea85b0029cc 100644 --- a/data/json/items/book/smg.json +++ b/data/json/items/book/smg.json @@ -7,7 +7,7 @@ "weight": "90 g", "volume": "250 ml", "price": 450, - "price_postapoc": 1900, + "price_postapoc": 750, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -25,7 +25,7 @@ "weight": "362 g", "volume": "500 ml", "price": 2100, - "price_postapoc": 6300, + "price_postapoc": 1250, "material": [ "paper" ], "symbol": "?", "color": "green", diff --git a/data/json/items/book/speech.json b/data/json/items/book/speech.json index 6028c789af9ff..577f1aeb7e0e0 100644 --- a/data/json/items/book/speech.json +++ b/data/json/items/book/speech.json @@ -7,7 +7,7 @@ "weight": "60 g", "volume": "250 ml", "price": 400, - "price_postapoc": 100, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -25,7 +25,7 @@ "weight": "454 g", "volume": "750 ml", "price": 1600, - "price_postapoc": 2900, + "price_postapoc": 250, "material": [ "paper" ], "symbol": "?", "color": "green", @@ -42,7 +42,7 @@ "weight": "1120 g", "volume": "2 L", "price": 4000, - "price_postapoc": 9000, + "price_postapoc": 250, "bashing": 4, "material": [ "paper" ], "symbol": "?", @@ -61,7 +61,7 @@ "weight": "2267 g", "volume": "2500 ml", "price": 3000, - "price_postapoc": 12000, + "price_postapoc": 500, "bashing": 7, "//": "Have you held one of these things? Bastards have some real weight behind 'em", "material": [ "paper" ], diff --git a/data/json/items/book/stabbing.json b/data/json/items/book/stabbing.json index bda9b9794c9fd..2b8a70ea182a2 100644 --- a/data/json/items/book/stabbing.json +++ b/data/json/items/book/stabbing.json @@ -7,7 +7,7 @@ "weight": "80 g", "volume": "250 ml", "price": 450, - "price_postapoc": 1900, + "price_postapoc": 750, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -25,7 +25,7 @@ "weight": "454 g", "volume": "250 ml", "price": 2000, - "price_postapoc": 7900, + "price_postapoc": 1250, "material": [ "paper" ], "symbol": "?", "color": "green", diff --git a/data/json/items/book/survival.json b/data/json/items/book/survival.json index 797ae48d6432d..c4168f145bf81 100644 --- a/data/json/items/book/survival.json +++ b/data/json/items/book/survival.json @@ -7,7 +7,7 @@ "weight": "1920 g", "volume": "2 L", "price": 920, - "price_postapoc": 2300, + "price_postapoc": 3750, "bashing": 8, "material": [ "paper" ], "symbol": "?", @@ -27,7 +27,7 @@ "weight": "440 g", "volume": "250 ml", "price": 450, - "price_postapoc": 1900, + "price_postapoc": 250, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -46,7 +46,7 @@ "weight": "180 g", "volume": "500 ml", "price": 450, - "price_postapoc": 1900, + "price_postapoc": 50, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -64,7 +64,7 @@ "weight": "80 g", "volume": "250 ml", "price": 450, - "price_postapoc": 1900, + "price_postapoc": 250, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -82,7 +82,7 @@ "weight": "454 g", "volume": "750 ml", "price": 2900, - "price_postapoc": 8900, + "price_postapoc": 750, "material": [ "paper" ], "symbol": "?", "color": "green", @@ -99,7 +99,7 @@ "weight": "212 g", "volume": "250 ml", "price": 4000, - "price_postapoc": 12000, + "price_postapoc": 750, "material": [ "paper", "leather" ], "symbol": "?", "color": "green", @@ -117,7 +117,7 @@ "weight": "1920 g", "volume": "2 L", "price": 920, - "price_postapoc": 2900, + "price_postapoc": 1250, "bashing": 8, "material": [ "paper" ], "symbol": "?", @@ -137,7 +137,7 @@ "weight": "910 g", "volume": "2 L", "price": 6000, - "price_postapoc": 19000, + "price_postapoc": 1750, "bashing": 4, "material": [ "paper" ], "symbol": "?", @@ -156,7 +156,7 @@ "weight": "400 g", "volume": "1250 ml", "price": 50000, - "price_postapoc": 50000, + "price_postapoc": 1500, "bashing": 5, "material": [ "paper", "leather" ], "symbol": "?", diff --git a/data/json/items/book/swimming.json b/data/json/items/book/swimming.json index 4a8a1596655e7..3b79420337e55 100644 --- a/data/json/items/book/swimming.json +++ b/data/json/items/book/swimming.json @@ -7,7 +7,7 @@ "weight": "60 g", "volume": "250 ml", "price": 460, - "price_postapoc": 1900, + "price_postapoc": 250, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -25,7 +25,7 @@ "weight": "400 g", "volume": "500 ml", "price": 2200, - "price_postapoc": 5900, + "price_postapoc": 750, "material": [ "paper" ], "symbol": "?", "color": "green", diff --git a/data/json/items/book/tailor.json b/data/json/items/book/tailor.json index c51e719368088..db708fe942a33 100644 --- a/data/json/items/book/tailor.json +++ b/data/json/items/book/tailor.json @@ -14,7 +14,7 @@ "weight": "180 g", "volume": "500 ml", "price": 450, - "price_postapoc": 1900, + "price_postapoc": 250, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -32,7 +32,7 @@ "weight": "75 g", "volume": "250 ml", "price": 400, - "price_postapoc": 1900, + "price_postapoc": 500, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -50,7 +50,7 @@ "weight": "454 g", "volume": "750 ml", "price": 1900, - "price_postapoc": 4700, + "price_postapoc": 750, "material": [ "paper" ], "symbol": "?", "color": "green", @@ -67,7 +67,7 @@ "weight": "2063 g", "volume": "2 L", "price": 9200, - "price_postapoc": 19000, + "price_postapoc": 1000, "bashing": 8, "material": [ "paper", "leather" ], "symbol": "?", @@ -87,7 +87,7 @@ "weight": "2400 g", "volume": "1500 ml", "price": 8000, - "price_postapoc": 20000, + "price_postapoc": 500, "bashing": 8, "material": [ "paper", "leather" ], "symbol": "?", @@ -106,7 +106,7 @@ "weight": "2267 g", "volume": "1 L", "price": 5000, - "price_postapoc": 21000, + "price_postapoc": 250, "bashing": 5, "material": [ "paper" ], "symbol": "?", @@ -126,7 +126,7 @@ "weight": "2600 g", "volume": "2 L", "price": 6000, - "price_postapoc": 30000, + "price_postapoc": 1500, "bashing": 4, "material": [ "paper" ], "symbol": "?", diff --git a/data/json/items/book/throw.json b/data/json/items/book/throw.json index f3a8a616a10d0..af9d706d108c9 100644 --- a/data/json/items/book/throw.json +++ b/data/json/items/book/throw.json @@ -7,7 +7,7 @@ "weight": "60 g", "volume": "250 ml", "price": 480, - "price_postapoc": 1900, + "price_postapoc": 250, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -25,7 +25,7 @@ "weight": "400 g", "volume": "500 ml", "price": 2800, - "price_postapoc": 5900, + "price_postapoc": 750, "material": [ "paper" ], "symbol": "?", "color": "green", diff --git a/data/json/items/book/traps.json b/data/json/items/book/traps.json index 2607019e48ae9..e54598d2fec9d 100644 --- a/data/json/items/book/traps.json +++ b/data/json/items/book/traps.json @@ -7,7 +7,7 @@ "weight": "454 g", "volume": "500 ml", "price": 2400, - "price_postapoc": 4900, + "price_postapoc": 750, "material": [ "paper" ], "symbol": "?", "color": "green", @@ -24,7 +24,7 @@ "weight": "80 g", "volume": "250 ml", "price": 450, - "price_postapoc": 1900, + "price_postapoc": 1250, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -41,7 +41,7 @@ "weight": "422 g", "volume": "500 ml", "price": 2400, - "price_postapoc": 6800, + "price_postapoc": 1750, "material": [ "paper" ], "symbol": "?", "color": "green", @@ -62,7 +62,7 @@ "weight": "422 g", "volume": "500 ml", "price": 2000, - "price_postapoc": 8600, + "price_postapoc": 2250, "material": [ "paper" ], "symbol": "?", "color": "green", @@ -83,7 +83,7 @@ "weight": "1100 g", "volume": "2 L", "price": 6000, - "price_postapoc": 19000, + "price_postapoc": 1750, "bashing": 4, "material": [ "paper" ], "symbol": "?", @@ -102,7 +102,7 @@ "weight": "1920 g", "volume": "2 L", "price": 920, - "price_postapoc": 1900, + "price_postapoc": 1250, "bashing": 8, "material": [ "paper" ], "symbol": "?", diff --git a/data/json/items/book/unarmed.json b/data/json/items/book/unarmed.json index 118a4b5516d10..453e732577375 100644 --- a/data/json/items/book/unarmed.json +++ b/data/json/items/book/unarmed.json @@ -7,7 +7,7 @@ "weight": "90 g", "volume": "250 ml", "price": 450, - "price_postapoc": 1900, + "price_postapoc": 750, "material": [ "paper" ], "symbol": "?", "color": "pink", @@ -25,7 +25,7 @@ "weight": "227 g", "volume": "500 ml", "price": 3800, - "price_postapoc": 8400, + "price_postapoc": 1250, "material": [ "paper" ], "symbol": "?", "color": "green", diff --git a/data/json/items/comestibles/alcohol.json b/data/json/items/comestibles/alcohol.json index b302f7f49d23b..53c635b585f99 100644 --- a/data/json/items/comestibles/alcohol.json +++ b/data/json/items/comestibles/alcohol.json @@ -16,6 +16,7 @@ "calories": 40, "description": "Goopy white wine, made from the fruit of the marloss.", "price": 2000, + "price_postapoc": 10, "material": [ "alcohol", "water", "mushroom" ], "primary_material": "alcohol", "volume": "250 ml", @@ -42,6 +43,7 @@ "calories": 40, "description": "Sparkling white wine, made from the world's noblest grape.", "price": 1100, + "price_postapoc": 150, "//": "Booze uses nonstandard charge counts: 15 shots of wine to the 750mL bottle. Priced at 1100 translates to $33 per, because it's still priced per 250 mL charge.", "material": [ "alcohol", "water" ], "primary_material": "alcohol", @@ -69,6 +71,7 @@ "calories": 41, "description": "America's most popular wine, and for good reason.", "price": 1200, + "price_postapoc": 150, "//": "The PLCB can get you some for around $10 per 750mL, but I imagine you want to pay for better ~fermentation~.", "material": [ "alcohol", "water" ], "primary_material": "alcohol", @@ -96,6 +99,7 @@ "calories": 41, "description": "The heavily disputed king of red wines. Pairs well with red meats and pasta.", "price": 1650, + "price_postapoc": 200, "material": [ "alcohol", "water" ], "primary_material": "alcohol", "volume": "250 ml", @@ -121,6 +125,7 @@ "calories": 41, "description": "Prized by collectors and adored by critics, it is one of the rarer and more elegant wines.", "price": 2600, + "price_postapoc": 150, "material": [ "alcohol", "water" ], "primary_material": "alcohol", "volume": "250 ml", @@ -147,6 +152,7 @@ "calories": 47, "description": "A wine popularly used in dishes served in Italian restaurants.", "price": 1500, + "price_postapoc": 150, "material": [ "alcohol", "water" ], "primary_material": "alcohol", "volume": "250 ml", @@ -173,6 +179,7 @@ "calories": 47, "description": "A soft wine with a pleasant herbal flavor and aroma. It is a common cocktail ingredient, and can be used as a substitute for white wine.", "price": 1500, + "price_postapoc": 150, "material": [ "alcohol", "water" ], "primary_material": "alcohol", "volume": "250 ml", @@ -200,6 +207,7 @@ "calories": 108, "description": "A strong ale.", "price": 150, + "price_postapoc": 150, "material": [ "alcohol", "water" ], "primary_material": "alcohol", "volume": "250 ml", @@ -227,6 +235,7 @@ "description": "A distilled grain alcohol, made from, by, and for real Southern colonels!", "calories": 79, "price": 2100, + "price_postapoc": 250, "//": "Given the comment, presuming we're taking bourbon here.", "material": "alcohol", "volume": "250 ml", @@ -254,6 +263,7 @@ "calories": 79, "description": "A beverage of alcohol, water, and not much else. In America, men make vodka, but in Soviet Russia, vodka makes the man.", "price": 1900, + "price_postapoc": 250, "material": "alcohol", "volume": "250 ml", "phase": "liquid", @@ -280,6 +290,7 @@ "calories": 79, "description": "An alcoholic beverage flavored with juniper berries. It smells faintly of berries, but mostly booze.", "price": 1900, + "price_postapoc": 250, "material": "alcohol", "volume": "250 ml", "phase": "liquid", @@ -306,6 +317,7 @@ "calories": 79, "description": "A distilled alcoholic beverage made from fermenting molasses. Drinking it might make you feel like a pirate. Or not.", "price": 2300, + "price_postapoc": 250, "material": "alcohol", "volume": "250 ml", "phase": "liquid", @@ -332,6 +344,7 @@ "calories": 79, "description": "A distilled alcoholic beverage made from a succulent plant with spiky leaves. Don't eat the worm! Wait, there's no worm in this bottle.", "price": 2600, + "price_postapoc": 250, "material": "alcohol", "volume": "250 ml", "phase": "liquid", @@ -358,6 +371,7 @@ "calories": 83, "description": "An orange flavored liquor used in many mixed drinks.", "price": 950, + "price_postapoc": 250, "material": "alcohol", "volume": "250 ml", "flags": [ "EDIBLE_FROZEN" ], @@ -384,6 +398,7 @@ "calories": 28, "description": "Really cheap fortified wine.", "price": 158, + "price_postapoc": 100, "material": [ "alcohol", "water" ], "primary_material": "alcohol", "volume": "250 ml", @@ -410,7 +425,7 @@ "addiction_potential": 7, "calories": 79, "description": "Strong alcoholic drinks, mixed with no regard for taste.", - "price": 50, + "price_postapoc": 250, "material": "alcohol", "volume": "250 ml", "phase": "liquid", @@ -437,6 +452,7 @@ "calories": 203, "description": "Weak alcoholic drinks, mixed with no regard for taste.", "price": 70, + "price_postapoc": 250, "material": [ "alcohol", "water" ], "primary_material": "alcohol", "volume": "250 ml", @@ -463,6 +479,7 @@ "calories": 49, "description": "Cheap booze made from fermented fruit juice. Tastes just like it sounds.", "price": 550, + "price_postapoc": 100, "material": [ "alcohol", "water" ], "primary_material": "alcohol", "volume": "250 ml", @@ -490,6 +507,7 @@ "calories": 79, "description": "Wine that has been distilled to a higher proof. Great as an after-dinner drink, but packs a punch.", "price": 1300, + "price_postapoc": 200, "material": "alcohol", "volume": "250 ml", "flags": [ "EATEN_COLD" ], @@ -516,6 +534,7 @@ "calories": 297, "description": "Sweetened coffee and whiskey topped with milk. Start your day the closeted alcoholic way!", "price": 500, + "price_postapoc": 250, "material": [ "alcohol", "water", "milk" ], "primary_material": "alcohol", "volume": "250 ml", @@ -541,6 +560,7 @@ "calories": 426, "description": "A blend of incredibly strong-flavored liquors that somehow tastes like none of them. It contains no tea, but the inclusion of cola gives it a tea-like color.", "price": 600, + "price_postapoc": 250, "material": [ "alcohol", "water" ], "primary_material": "alcohol", "volume": "250 ml", @@ -568,6 +588,7 @@ "calories": 213, "description": "A mix of orange juice and vodka. It's the surreptitious drunkard mechanic's drink of choice.", "price": 600, + "price_postapoc": 250, "material": [ "alcohol", "fruit" ], "primary_material": "alcohol", "volume": "250 ml", @@ -595,6 +616,7 @@ "calories": 212, "description": "Like apple cider, only with vodka.", "price": 500, + "price_postapoc": 250, "material": [ "alcohol", "fruit" ], "primary_material": "alcohol", "volume": "250 ml", @@ -622,6 +644,7 @@ "calories": 177, "description": "Suitable for tropical retreats and Canadian artists alike.", "price": 600, + "price_postapoc": 250, "material": [ "alcohol", "junk" ], "primary_material": "alcohol", "volume": "250 ml", @@ -647,6 +670,7 @@ "calories": 108, "description": "A grain alcohol flavored with hops. It's best served cold, in a glass, and with a lime - but you're not that lucky.", "price": 110, + "price_postapoc": 100, "material": [ "alcohol", "water" ], "primary_material": "alcohol", "volume": "250 ml", @@ -673,6 +697,7 @@ "calories": 53, "description": "Well-aged honey wine, spiced with a hint of hops. Goes down bittersweet.", "price": 1100, + "price_postapoc": 150, "material": [ "alcohol", "honey" ], "primary_material": "alcohol", "volume": "250 ml", @@ -699,6 +724,7 @@ "calories": 68, "description": "A light and delicious wine made from dandelion flowers. Slightly effervescent, it is smooth and crisp.", "price": 1400, + "price_postapoc": 100, "//": "Nope, homebrew is not more expensive than pinot noir, sorry.", "material": [ "alcohol", "water" ], "primary_material": "alcohol", @@ -726,6 +752,7 @@ "calories": 68, "description": "A light and delicious wine made from burdock roots. Somewhat sweet.", "price": 1400, + "price_postapoc": 100, "material": [ "alcohol", "water" ], "primary_material": "alcohol", "volume": "250 ml", @@ -753,6 +780,7 @@ "calories": 53, "description": "A potent wine flavored with pine resin. Bold and pungent, its biting taste and strong aroma takes some getting used to.", "price": 1000, + "price_postapoc": 100, "material": [ "alcohol", "water" ], "primary_material": "alcohol", "volume": "250 ml", @@ -779,6 +807,7 @@ "calories": 108, "description": "Not the finest drink you've had, but hey, it's alcohol by the gallon.", "price": 500, + "price_postapoc": 50, "material": [ "alcohol", "water" ], "primary_material": "alcohol", "volume": "250 ml", @@ -806,6 +835,7 @@ "calories": 101, "description": "Only the strongest, purest, good ol' fashioned hooch, distilled from corn and sugar. Guaranteed to make you forget about the whole Cataclysm thing, or you get your vision back.", "price": 850, + "price_postapoc": 200, "material": "alcohol", "volume": "250 ml", "phase": "liquid", @@ -832,6 +862,7 @@ "calories": 108, "description": "A lager beer imported from Europe. Best served cold, in a glass - but you're not that lucky.", "price": 260, + "price_postapoc": 100, "material": [ "alcohol", "water" ], "primary_material": "alcohol", "volume": "250 ml", @@ -859,6 +890,7 @@ "calories": 108, "description": "A tasty craft beer. Best served cold, in a glass - but you're not that lucky.", "price": 150, + "price_postapoc": 100, "material": [ "alcohol", "water" ], "primary_material": "alcohol", "volume": "250 ml", @@ -886,6 +918,7 @@ "calories": 108, "description": "A very flavorful microbrewed beer. Best served cold, in a glass - but you're not that lucky.", "price": 150, + "price_postapoc": 100, "material": [ "alcohol", "water" ], "primary_material": "alcohol", "volume": "250 ml", @@ -913,6 +946,7 @@ "calories": 87, "description": "A tasty craft beer, as dark in color as the days ahead.", "price": 160, + "price_postapoc": 100, "material": [ "alcohol", "water" ], "primary_material": "alcohol", "volume": "250 ml", @@ -940,6 +974,7 @@ "calories": 108, "description": "A flavorful and filling beer brewed by monks in Belgium. Best served in a goblet.", "price": 130, + "price_postapoc": 100, "material": [ "alcohol", "water" ], "primary_material": "alcohol", "volume": "250 ml", @@ -967,6 +1002,7 @@ "calories": 181, "description": "A very flavorful beer that has been aged in bourbon barrels. It is as black as midnight on a moonless night and has the viscosity of oil. While very tasty, it also has an alcohol content on the level with wine.", "price": 450, + "price_postapoc": 100, "material": [ "alcohol", "water" ], "primary_material": "alcohol", "volume": "250 ml", @@ -994,6 +1030,7 @@ "calories": 68, "description": "Strawberries left to ferment with a few other choice ingredients offer up a surprisingly palatable mixture; you barely even have to force yourself to drink it after the first few gulps.", "price": 1600, + "price_postapoc": 50, "material": [ "alcohol", "water", "fruit" ], "primary_material": "alcohol", "volume": "250 ml", @@ -1022,6 +1059,7 @@ "calories": 82, "description": "This fermented blueberry mixture is surprisingly hearty, though the soup-like consistency is slightly unsettling no matter how much you drink.", "price": 1400, + "price_postapoc": 50, "material": [ "alcohol", "water", "fruit" ], "primary_material": "alcohol", "volume": "250 ml", @@ -1050,6 +1088,7 @@ "calories": 79, "description": "Only the finest whiskey straight from the bung.", "price": 300, + "price_postapoc": 300, "//": "Priced by the 100 liter barrel, this is multiplied by 400 to achieve the final cost.", "material": "alcohol", "volume": "250 ml", @@ -1066,6 +1105,7 @@ "name": { "str": "single pot still Irish whiskey", "str_pl": "single pot still Irish whiskey" }, "description": "A whiskey made from a mixed mash of malted and unmalted barley.", "price": 2600, + "price_postapoc": 250, "fun": 20 }, { @@ -1075,6 +1115,7 @@ "name": { "str": "cheap whiskey", "str_pl": "cheap whiskey" }, "description": "Really cheap blended whiskey.", "price": 1800, + "price_postapoc": 200, "fun": 12 }, { @@ -1084,6 +1125,7 @@ "name": { "str": "Canadian whiskey", "str_pl": "Canadian whiskey" }, "description": "A multi-grain liquor made from a mash of corn and rye.", "price": 2400, + "price_postapoc": 250, "fun": 17 }, { @@ -1104,6 +1146,7 @@ "calories": 99, "description": "East India Solera. A true drink of a British gentleman. Sherry, Niles?", "price": 2500, + "price_postapoc": 150, "material": "alcohol", "volume": "250 ml", "flags": [ "EATEN_COLD" ], @@ -1119,6 +1162,7 @@ "name": { "str": "Bristol Cream", "str_pl": "Bristol Cream" }, "description": "A fine sherry that has been aged in American oak casks and bottled in Bristol, England.", "price": 2800, + "price_postapoc": 150, "fun": 18 }, { @@ -1128,6 +1172,7 @@ "name": { "str": "Madeira wine", "str_pl": "Madeira wine" }, "description": "Fortified wine from Madeira. A true Royal Navy drink.", "price": 2400, + "price_postapoc": 150, "fun": 15 }, { @@ -1148,6 +1193,7 @@ "calories": 52, "description": "This definitely tastes like a hobo drink.", "price": 900, + "price_postapoc": 100, "material": [ "alcohol", "junk" ], "primary_material": "alcohol", "volume": "250 ml", @@ -1175,6 +1221,7 @@ "calories": 35, "description": "A mix of equal parts wine and cola. It's not as bad as some might imagine, and pretty popular among young and/or poor people in some countries.", "price": 800, + "price_postapoc": 50, "material": [ "alcohol", "junk" ], "primary_material": "alcohol", "volume": "500 ml", @@ -1201,6 +1248,7 @@ "calories": 61, "description": "This cocktail dates from the Prohibition era. Gin, honey and lemon in a delightful mix.", "price": 850, + "price_postapoc": 250, "material": [ "alcohol", "honey" ], "primary_material": "alcohol", "volume": "500 ml", @@ -1227,6 +1275,7 @@ "calories": 261, "description": "A mixed drink made of whiskey and lemon juice.", "price": 800, + "price_postapoc": 250, "material": "alcohol", "volume": "250 ml", "phase": "liquid", @@ -1250,6 +1299,7 @@ "calories": 347, "description": "A mixed drink containing all the advantages of its ingredients and none of their disadvantages. It tastes great and it's a good source of nourishment.", "price": 350, + "price_postapoc": 300, "material": [ "alcohol", "honey" ], "primary_material": "alcohol", "volume": "500 ml", @@ -1275,6 +1325,7 @@ "calories": 541, "description": "Droplet shaped ant food. It's like a thick balloon the size of a baseball, filled with sticky liquid. Unlike bee honey, this has mostly a sour taste, probably because ants feed upon a variety of things.", "price": 1000, + "price_postapoc": 300, "material": [ "junk", "honey" ], "primary_material": "alcohol", "volume": "250 ml", @@ -1301,6 +1352,7 @@ "calories": 117, "description": "Smooth and rich, this spoon-coating mixture of milk, cream, eggs, and booze is a popular traditional holiday drink. Having been fortified with alcohol, it will keep for a long time.", "price": 45, + "price_postapoc": 150, "//": "A 12-charge gallon currently goes for around US$4, and eggnog is a bit more expensive than that.", "material": [ "milk", "alcohol", "egg" ], "primary_material": "alcohol", @@ -1329,6 +1381,7 @@ "calories": 104, "description": "This is a popular cocktail made with gin and dry vermouth, dating from the Prohibition era.", "price": 850, + "price_postapoc": 250, "material": [ "alcohol", "water" ], "primary_material": "alcohol", "volume": "500 ml", diff --git a/data/json/items/comestibles/bread.json b/data/json/items/comestibles/bread.json index 73b8548d77a63..79de8455660a1 100644 --- a/data/json/items/comestibles/bread.json +++ b/data/json/items/comestibles/bread.json @@ -13,6 +13,7 @@ "healthy": -1, "description": "These balls of dough have been cut into shape, covered with sugar, and cooked to a crisp. A staple of fairgrounds everywhere.", "price": 100, + "price_postapoc": 50, "volume": "250 ml", "charges": 4, "flags": [ "EATEN_HOT" ], @@ -28,6 +29,7 @@ "weight": "52 g", "volume": "250 ml", "price": 10, + "price_postapoc": 10, "bashing": 8, "material": [ "glass", "wheat" ], "looks_like": "jar_glass", @@ -51,6 +53,7 @@ "weight": "52 g", "volume": "250 ml", "price": 10, + "price_postapoc": 10, "bashing": 8, "material": [ "glass", "wheat" ], "looks_like": "jar_glass", @@ -75,6 +78,7 @@ "looks_like": "jar_glass", "volume": "250 ml", "price": 50, + "price_postapoc": 10, "bashing": 8, "material": [ "glass", "wheat" ], "symbol": "%", @@ -94,6 +98,7 @@ "calories": 174, "description": "Healthy and filling, with a sharper taste and thicker crust than yeast-only bread.", "price": 190, + "price_postapoc": 100, "material": "wheat", "looks_like": "bread", "volume": "750 ml", @@ -114,6 +119,7 @@ "calories": 234, "description": "Simple unleavened bread.", "price": 23, + "price_postapoc": 100, "material": "wheat", "volume": "250 ml", "flags": [ "EATEN_HOT", "EDIBLE_FROZEN" ], @@ -133,6 +139,7 @@ "calories": 84, "description": "Healthy and filling.", "price": 47, + "price_postapoc": 100, "material": "wheat", "volume": "250 ml", "charges": 2, @@ -154,6 +161,7 @@ "calories": 198, "description": "Healthy and filling cornbread.", "price": 75, + "price_postapoc": 100, "material": "veggy", "primary_material": "wheat", "volume": "250 ml", @@ -174,6 +182,7 @@ "calories": 159, "description": "A dense and tasty fried bread treat.", "price": 275, + "price_postapoc": 300, "material": [ "wheat", "junk" ], "primary_material": "wheat", "volume": "250 ml", @@ -196,6 +205,7 @@ "calories": 52, "description": "A round, thin flatbread made from finely ground corn flour.", "price": 50, + "price_postapoc": 50, "material": "veggy", "primary_material": "wheat", "volume": "250 ml", @@ -217,6 +227,7 @@ "calories": 280, "description": "A dry and virtually tasteless bread product capable of remaining edible without spoilage for vast lengths of time.", "price": 125, + "price_postapoc": 150, "material": "wheat", "volume": "250 ml", "charges": 2, @@ -238,6 +249,7 @@ "calories": 148, "description": "Wholesome and filling, this home made biscuit is pretty good!", "price": 57, + "price_postapoc": 250, "material": "wheat", "volume": "250 ml", "charges": 10, @@ -259,6 +271,7 @@ "calories": 80, "description": "Flour is a commodity these days and to deal with that, most survivors resort to mix it with leftovers of other ingredients and bake it all into bread. It's filling, and that's what matters.", "price": 400, + "price_postapoc": 50, "material": [ "junk", "wheat" ], "primary_material": "wheat", "volume": "250 ml", diff --git a/data/json/items/comestibles/brewing.json b/data/json/items/comestibles/brewing.json index 7e5b9fecf569d..e7164a90efb69 100644 --- a/data/json/items/comestibles/brewing.json +++ b/data/json/items/comestibles/brewing.json @@ -13,6 +13,7 @@ "quench": -5, "fun": 4, "price": 4, + "price_postapoc": 10, "volume": "250 ml", "charges": 5, "phase": "liquid", @@ -33,6 +34,7 @@ "quench": 4, "fun": -15, "price": 0, + "price_postapoc": 10, "volume": "250 ml", "charges": 7, "phase": "liquid", @@ -58,6 +60,7 @@ "fun": 2, "material": [ "water", "alcohol" ], "volume": "250 ml", + "price_postapoc": 10, "charges": 7, "phase": "liquid", "flags": [ "NUTRIENT_OVERRIDE" ], @@ -77,6 +80,7 @@ "quench": 4, "fun": -15, "price": 0, + "price_postapoc": 10, "volume": "250 ml", "charges": 7, "phase": "liquid", @@ -102,6 +106,7 @@ "fun": 2, "material": [ "water", "alcohol" ], "volume": "250 ml", + "price_postapoc": 10, "charges": 7, "phase": "liquid", "flags": [ "NUTRIENT_OVERRIDE" ], @@ -121,6 +126,7 @@ "fun": -5, "price": 0, "volume": "250 ml", + "price_postapoc": 10, "charges": 7, "phase": "liquid", "comestible_type": "DRINK", @@ -146,6 +152,7 @@ "fun": 2, "material": [ "water", "alcohol" ], "volume": "250 ml", + "price_postapoc": 10, "charges": 7, "phase": "liquid", "flags": [ "NUTRIENT_OVERRIDE" ], @@ -166,6 +173,7 @@ "fun": -5, "price": 0, "volume": "250 ml", + "price_postapoc": 10, "charges": 7, "phase": "liquid", "comestible_type": "DRINK", @@ -190,6 +198,7 @@ "fun": 2, "material": [ "water", "alcohol" ], "volume": "250 ml", + "price_postapoc": 10, "charges": 7, "phase": "liquid", "flags": [ "NUTRIENT_OVERRIDE" ], @@ -211,6 +220,7 @@ "price": 0, "material": [ "fruit", "water" ], "volume": "250 ml", + "price_postapoc": 10, "charges": 7, "phase": "liquid", "comestible_type": "DRINK", @@ -233,6 +243,7 @@ "material": "honey", "primary_material": "water", "volume": "250 ml", + "price_postapoc": 10, "charges": 7, "phase": "liquid", "comestible_type": "DRINK", @@ -252,6 +263,7 @@ "fun": -15, "price": 0, "volume": "250 ml", + "price_postapoc": 10, "charges": 7, "phase": "liquid", "comestible_type": "DRINK", @@ -272,6 +284,7 @@ "fun": -15, "price": 0, "volume": "250 ml", + "price_postapoc": 10, "charges": 7, "phase": "liquid", "comestible_type": "DRINK", @@ -292,6 +305,7 @@ "fun": -20, "price": 0, "volume": "250 ml", + "price_postapoc": 10, "charges": 7, "phase": "liquid", "comestible_type": "DRINK", @@ -313,6 +327,7 @@ "fun": -20, "price": 0, "volume": "250 ml", + "price_postapoc": 10, "phase": "liquid", "comestible_type": "DRINK", "brewable": { "time": "9 hours", "results": [ "hb_beer", "yeast" ] } @@ -332,6 +347,7 @@ "fun": -5, "material": [ "water", "junk" ], "volume": "250 ml", + "price_postapoc": 10, "charges": 7, "phase": "liquid", "comestible_type": "DRINK", @@ -356,6 +372,7 @@ "fun": -20, "material": [ "water", "alcohol" ], "volume": "250 ml", + "price_postapoc": 10, "charges": 7, "phase": "liquid", "flags": [ "NUTRIENT_OVERRIDE" ], @@ -377,6 +394,7 @@ "price": 10, "material": "milk", "volume": "250 ml", + "price_postapoc": 10, "phase": "liquid", "fun": -12, "flags": [ "NUTRIENT_OVERRIDE" ], @@ -396,6 +414,7 @@ "fun": -15, "price": 0, "volume": "250 ml", + "price_postapoc": 10, "charges": 16, "phase": "liquid", "comestible_type": "DRINK", diff --git a/data/json/items/comestibles/carnivore.json b/data/json/items/comestibles/carnivore.json index 4b3f07697738f..16ea638f70ced 100644 --- a/data/json/items/comestibles/carnivore.json +++ b/data/json/items/comestibles/carnivore.json @@ -21,6 +21,7 @@ "weight": "148 g", "volume": "250 ml", "price": 500, + "price_postapoc": 50, "spoils_in": "12 hours", "flags": [ "SMOKABLE", "RAW" ], "smoking_result": "fish_smoked", @@ -35,6 +36,7 @@ "description": "Freshly cooked fish. Very nutritious.", "proportional": { "price": 1.5 }, "spoils_in": "1 day", + "price_postapoc": 100, "parasites": 0, "flags": [ "EATEN_HOT" ] }, @@ -109,6 +111,7 @@ "weight": "296 g", "volume": "250 ml", "price": 500, + "price_postapoc": 50, "spoils_in": "1 day", "calories": 402, "healthy": -1, @@ -205,6 +208,7 @@ "name": "cooked meat", "description": "This is a chunk of freshly cooked meat. It's filling and nutritious, but unseasoned and a bit bland.", "price": 750, + "price_postapoc": 100, "parasites": 0, "calories": 402, "vitamins": [ [ "vitC", 16 ], [ "calcium", 2 ], [ "iron", 69 ], [ "vitB", 778 ] ], @@ -253,6 +257,7 @@ "name": "raw offal", "description": "Offal is uncooked internal organs and entrails. It's filled with essential vitamins, but most people consider it a bit gross unless very carefully prepared.", "proportional": { "parasites": 2.0 }, + "price_postapoc": 25, "delete": { "flags": [ "SMOKABLE" ] }, "relative": { "vitamins": [ [ "vitA", 5 ], [ "iron", 4 ] ], "fun": -5 } }, @@ -264,6 +269,7 @@ "description": "This is freshly cooked organ meat and entrails. It's filled with essential vitamins, but most people consider it a bit gross unless very carefully prepared.", "parasites": 0, "healthy": 1, + "price_postapoc": 50, "fun": -5, "flags": [ "EATEN_HOT" ] }, @@ -274,6 +280,7 @@ "name": { "str": "pickled offal", "str_pl": "pickled offal" }, "description": "This is a mass of entrails and organ meat, preserved in brine. Packed with essential vitamins, and although it looks like a lab specimen, it actually tastes pretty palatable.", "volume": "500 ml", + "price_postapoc": 300, "stack_size": 2, "parasites": 0, "healthy": 1, @@ -290,6 +297,7 @@ "name": { "str": "canned offal", "str_pl": "canned offal" }, "description": "Freshly cooked organ meat and entrails, preserved by canning. Unappetizing, but filled with essential vitamins.", "volume": "500 ml", + "price_postapoc": 300, "stack_size": 2, "parasites": 0, "healthy": 1, @@ -305,6 +313,7 @@ "description": "The stomach of a woodland creature. It is surprisingly durable.", "weight": "72 g", "volume": "250 ml", + "price_postapoc": 25, "price": 200, "spoils_in": "8 hours", "calories": 60, @@ -339,6 +348,7 @@ "charges": 2, "parasites": 0, "price": 320, + "price_postapoc": 250, "quench": -5, "fun": 4, "calories": 348, @@ -355,6 +365,7 @@ "color": "light_gray", "spoils_in": "24 days", "parasites": 0, + "price_postapoc": 250, "quench": -5, "fun": 4, "proportional": { "price": 2.0, "volume": 0.345, "weight": 0.345 }, @@ -372,6 +383,7 @@ "description": "Tasty meat that has been heavily smoked for preservation. It could be further smoked to dehydrate it completely.", "color": "brown", "spoils_in": "24 days", + "price_postapoc": 200, "quench": -1, "fun": 5, "flags": [ "EATEN_HOT", "SMOKED", "SMOKABLE" ], @@ -385,6 +397,7 @@ "description": "Tasty fish that has been heavily smoked for long term preservation. It could be further smoked to dehydrate it completely.", "color": "brown", "spoils_in": "24 days", + "price_postapoc": 200, "fun": 6, "flags": [ "EATEN_HOT", "SMOKED", "SMOKABLE" ], "smoking_result": "dry_fish" @@ -402,6 +415,7 @@ "charges": 4, "spoils_in": "1 day", "healthy": -2, + "price_postapoc": 25, "quench": 2, "fun": -10, "calories": 50, @@ -424,6 +438,7 @@ "looks_like": "offal", "name": "raw liver", "description": "The liver from an animal. Although many dislike the texture, it's one of the more vitamin rich parts of the animal. It is very good in sausages, but maybe a little less appetizing when cooked on its own.", + "price_postapoc": 25, "quench": -4, "calories": 92, "vitamins": [ [ "vitA", 75 ], [ "vitC", 0 ], [ "calcium", 0 ], [ "iron", 8 ], [ "vitB", 336 ] ] @@ -436,6 +451,7 @@ "name": "cooked liver", "description": "Chock-full of B-Vitamins! Cooked liver isn't all that bad, depending on how you feel about the texture, but this is probably the least fancy way to do it.", "parasites": 0, + "price_postapoc": 50, "fun": -2, "healthy": 0, "delete": { "flags": [ "RAW" ] } @@ -449,6 +465,7 @@ "description": "The brain from an animal. You wouldn't want to eat this raw…", "color": "light_gray", "healthy": -15, + "price_postapoc": 10, "quench": 10, "fun": -20, "parasites": 15, @@ -462,6 +479,7 @@ "looks_like": "offal_cooked", "name": { "str": "cooked brains", "str_pl": "cooked brains" }, "description": "Now you can emulate those zombies you love so much! Preparing brain for eating is challenging, and this doesn't seem to be the best way to do it.", + "price_postapoc": 25, "parasites": 0, "healthy": -2, "fun": -8, @@ -476,6 +494,7 @@ "description": "The kidney from an animal. Preparing it for cooking is a challenge unless you want the kitchen to smell strongly of urine.", "color": "brown", "healthy": -8, + "price_postapoc": 25, "quench": -5, "calories": 54, "vitamins": [ [ "vitA", 6 ], [ "vitC", 2 ], [ "calcium", 0 ], [ "iron", 8 ], [ "vitB", 155 ] ] @@ -488,6 +507,7 @@ "name": "cooked kidney", "description": "No, this is not beans.", "healthy": -2, + "price_postapoc": 25, "quench": -2, "fun": -3, "parasites": 0, @@ -502,6 +522,7 @@ "description": "Sweetbreads are the thymus or pancreas of an animal. These are a delicacy, if prepared properly.", "color": "brown", "healthy": 0, + "price_postapoc": 25, "quench": 0, "calories": 164, "vitamins": [ [ "vitA", 0 ], [ "vitC", 0 ], [ "calcium", 0 ], [ "iron", 2 ], [ "vitB", 12 ] ] @@ -512,6 +533,7 @@ "copy-from": "sweetbread", "looks_like": "meat_cooked", "name": "cooked sweetbread", + "price_postapoc": 50, "fun": -4, "description": "Normally a delicacy, it needs a little… something.", "parasites": 0, @@ -528,6 +550,7 @@ "symbol": "~", "quench": 5, "healthy": -8, + "price_postapoc": 10, "calories": 43, "description": "Blood, possibly that of a human. Disgusting!", "price": 0, @@ -546,6 +569,7 @@ "symbol": "%", "description": "A bone from some creature or other. Could be used to make some stuff, like needles.", "price": 0, + "price_postapoc": 10, "material": "bone", "volume": "250 ml", "vitamins": [ [ "calcium", 96 ] ] @@ -561,6 +585,7 @@ "symbol": "%", "quench": -10, "healthy": -5, + "price_postapoc": 250, "calories": 1923, "description": "Freshly butchered fat. You could eat it raw, but it is better used as an ingredient in other foods or projects.", "price": 0, @@ -584,6 +609,7 @@ "calories": 992, "description": "A smooth white block of cleaned and rendered animal fat. It will remain edible for a very long time, and can be used as an ingredient in many foods and projects.", "price": 500, + "price_postapoc": 800, "//": "*May* have been commercially traded.", "material": "flesh", "volume": "250 ml", @@ -663,6 +689,7 @@ "calories": 174, "description": "Meat that's obviously unhealthy. You could eat it, but it will poison you.", "price": 0, + "price_postapoc": 10, "material": "flesh", "volume": "250 ml", "fun": -10, @@ -683,6 +710,7 @@ "calories": 17, "description": "A rotten and brittle bone from some unnatural creature or other. Could be used to make some stuff, like charcoal or glue. You could eat it, but it will poison you.", "price": 0, + "price_postapoc": 5, "//": "Not for use in edible recipes, and should require ~200% as much as normal for applicable inedible recipes except for charcoal.", "material": "bone", "volume": "250 ml", @@ -712,6 +740,7 @@ "calories": 9, "description": "A watery yellow glob of fat from some unnatural creature or other. You could eat it, but it will poison you.", "price": 0, + "price_postapoc": 25, "//": "Not for use in edible recipes, and should require ~200% as much as normal for applicable inedible recipes.", "material": "flesh", "volume": "250 ml", @@ -733,6 +762,7 @@ "calories": 18, "description": "A smooth grayish block of cleaned and rendered monster fat. It will remain 'fresh' for a very long time, and can be used as an ingredient in many projects. You could eat it, but it will poison you.", "price": 0, + "price_postapoc": 50, "//": "Not for use in edible/foodsafe recipes. Inefficiency is handled by tainted tallow recipe requiring 200% as much materials input as regular tallow recipe.", "material": "flesh", "volume": "250 ml", @@ -769,6 +799,7 @@ "calories": 60, "description": "A small boiled stomach from an animal, nothing else. It looks all but appetizing.", "price": 375, + "price_postapoc": 10, "material": "flesh", "volume": "250 ml", "flags": [ "EATEN_HOT" ], @@ -798,6 +829,7 @@ "calories": 350, "description": "A carefully folded raw skin harvested from an animal. You can cure it for storage and tanning, or eat it if you're desperate enough.", "price": 330, + "price_postapoc": 20, "material": "flesh", "flags": "TRADER_AVOID", "stack_size": 1, @@ -810,6 +842,7 @@ "name": "tainted hide", "spoils_in": "6 hours", "use_action": "POISON", + "price_postapoc": 10, "description": "A carefully folded poisonous raw skin harvested from an unnatural creature. You can cure it for storage and tanning.", "price": 0 }, @@ -837,6 +870,7 @@ "calories": 350, "description": "A carefully folded raw skin harvested from a fur-bearing animal. It still has the fur attached. You can cure it for storage and tanning, or eat it if you're desperate enough.", "price": 330, + "price_postapoc": 100, "material": [ "fur", "flesh" ], "flags": [ "NO_SALVAGE", "TRADER_AVOID" ], "stack_size": 1, @@ -851,6 +885,7 @@ "use_action": "POISON", "description": "A carefully folded raw skin harvested from a fur-bearing unnatural creature. It still has the fur attached and is poisonous. You can cure it for storage and tanning.", "price": 0, + "price_postapoc": 50, "flags": [ "NO_SALVAGE" ] }, { @@ -874,6 +909,7 @@ "quench": 10, "description": "A thick mass of flesh superficially resembling a mammalian heart, covered in dimpled grooves and the size of your fist.", "price": 3000, + "price_postapoc": 100, "material": [ "flesh" ], "volume": "500 ml", "fun": -25, @@ -892,6 +928,7 @@ "quench": 20, "description": "A thick, hulking mass of flesh superficially resembling a mammalian heart, covered in ribbed grooves and easily the size of your head. It's still full of, er, whatever passes for blood in jabberwocks, and is heavy in your hands. After everything you've seen lately, you can't help but remember old sayings about eating the hearts of your enemies…", "price": 6500, + "price_postapoc": 500, "material": [ "flesh" ], "volume": "1 L", "fun": -25, @@ -909,6 +946,7 @@ "calories": 217, "description": "A huge strip of muscle - all that remains of a putrid heart that has been sliced open and drained of blood. It could be eaten if you're hungry, but looks *disgusting*.", "price": 1000, + "price_postapoc": 25, "material": [ "flesh" ], "volume": "250 ml", "fun": -30 @@ -937,6 +975,7 @@ "description": "The alien beauty of this indigo flower is betrayed by its disgustingly fleshy composition. What from afar appear to be petals are but layered membranes of transparent veiny flesh, given color by a covering of blue iridescent ichor. Even if it is certainly poisonous, it has a pleasant medicinal smell to it.", "stim": 30, "healthy": -10, + "price_postapoc": 10, "fun": 15, "use_action": { "type": "consume_drug", @@ -956,6 +995,7 @@ "type": "COMESTIBLE", "name": { "str": "leech bark", "str_pl": "scraps of leech bark" }, "description": "Dry and tough bark matter harvested from an alien plant. It is slightly translucent, and if placed against the light you can distinguish glistening blue veins running through it.", + "price_postapoc": 10, "vitamins": [ [ "vitA", 6 ], [ "vitC", 0 ], [ "calcium", 2 ], [ "iron", 8 ], [ "vitB", 6 ], [ "mutant_toxin", 12 ] ] } ] diff --git a/data/json/items/comestibles/dairy.json b/data/json/items/comestibles/dairy.json index b530eedd864ff..945e9328fc905 100644 --- a/data/json/items/comestibles/dairy.json +++ b/data/json/items/comestibles/dairy.json @@ -6,6 +6,7 @@ "copy-from": "milk", "spoils_in": "12 hours", "price": 19, + "price_postapoc": 50, "contamination": [ { "disease": "bad_food", "probability": 5 } ], "description": "This is raw, unhomogenized and unpasteurized milk from a cow. It couldn't be any fresher unless you drank it straight from the cow, which might upset it. Depending on your dietary sensibilities, you might want to pasteurize or even boil this before drinking." }, @@ -17,7 +18,8 @@ "copy-from": "milk", "container": "carton_sealed", "description": "This is milk that has been pasteurized at much higher temperatures than normal. It tastes slightly different, but, unopened, will last far longer than regular milk.", - "price": 50 + "price": 50, + "price_postapoc": 150 }, { "type": "COMESTIBLE", @@ -34,6 +36,7 @@ "calories": 207, "description": "Milk that's had about 60% of its water removed prior to canning.", "price": 38, + "price_postapoc": 200, "material": [ "milk" ], "volume": "500 ml", "phase": "liquid", @@ -57,6 +60,7 @@ "calories": 161, "description": "This is cultured milk defatted either due to churning or curdling. Spoils quickly.", "price": 1, + "price_postapoc": 50, "material": [ "milk" ], "volume": "250 ml", "phase": "liquid", @@ -76,6 +80,7 @@ "calories": 150, "description": "Delicious fermented dairy. It tastes of vanilla.", "price": 190, + "price_postapoc": 100, "material": [ "milk" ], "volume": "250 ml", "phase": "liquid", @@ -97,6 +102,7 @@ "container": "wrapper", "description": "A yellow stick of milkfat and milk solids, usually made from cow's milk.", "price": 300, + "price_postapoc": 750, "material": [ "milk" ], "volume": "500 ml", "charges": 32, @@ -116,6 +122,7 @@ "calories": 110, "description": "A white stick of raw milkfat and milk solids, made directly from cow's milk.", "price": 200, + "price_postapoc": 500, "material": [ "milk" ], "volume": "500 ml", "charges": 33, @@ -133,6 +140,7 @@ "calories": 112, "description": "Clarified butter, free from milk solids and water. Will last a very long time.", "price": 420, + "price_postapoc": 50, "phase": "liquid" }, { @@ -148,6 +156,7 @@ "calories": 302, "description": "Sugary, fermented dairy. A wonderful treat.", "price": 210, + "price_postapoc": 250, "material": [ "milk", "junk" ], "volume": "250 ml", "phase": "liquid", @@ -168,6 +177,7 @@ "calories": 35, "description": "Milk that has been curdled with vinegar and rennet. It still needs to be salted and drained of whey.", "price": 10, + "price_postapoc": 10, "material": [ "milk" ], "volume": "250 ml", "phase": "liquid", @@ -187,6 +197,7 @@ "calories": 135, "description": "Hard, dry cheese made to last, unlike modern processed cheese. Will make you thirsty though.", "price": 385, + "price_postapoc": 150, "material": [ "milk" ], "primary_material": "cheese", "volume": "250 ml", @@ -207,6 +218,7 @@ "calories": 120, "description": "A block of yellow processed cheese.", "price": 450, + "price_postapoc": 400, "material": [ "milk" ], "primary_material": "cheese", "volume": "250 ml", @@ -228,6 +240,7 @@ "calories": 357, "description": "A tortilla filled with cheese and lightly grilled.", "price": 500, + "price_postapoc": 300, "material": [ "milk" ], "primary_material": "cheese", "volume": "250 ml", @@ -248,6 +261,7 @@ "calories": 132, "description": "Dehydrated milk powder. Mix with water to make drinkable milk.", "price": 1100, + "price_postapoc": 200, "material": [ "powder", "milk" ], "primary_material": "powder", "volume": "250 ml", @@ -271,6 +285,7 @@ "calories": 103, "description": "Cow's milk that has been partly dehydrated to vastly increase its shelf life, and also sweetened.", "price": 70, + "price_postapoc": 100, "material": [ "milk", "junk" ], "primary_material": "milk", "volume": "500 ml", diff --git a/data/json/items/comestibles/drink.json b/data/json/items/comestibles/drink.json index 2f65118866d70..a5187cfcbe929 100644 --- a/data/json/items/comestibles/drink.json +++ b/data/json/items/comestibles/drink.json @@ -14,6 +14,7 @@ "calories": 120, "description": "Pressed from fresh apples. Tasty and nutritious.", "price": 85, + "price_postapoc": 25, "material": "fruit", "primary_material": "water", "volume": "250 ml", @@ -37,6 +38,7 @@ "calories": 50, "description": "Milk some almonds? Not quite, but blend them with water, yes! A dairy-free alternative strong in calcium! Rival to soy milk.", "price": 40, + "price_postapoc": 50, "material": "water", "volume": "250 ml", "phase": "liquid", @@ -59,6 +61,7 @@ "calories": 110, "description": "Milk some soybeans? Not quite, but blend them with water, yes! A dairy-free alternative strong in protein! Rival to almond milk.", "price": 40, + "price_postapoc": 50, "material": "water", "volume": "250 ml", "phase": "liquid", @@ -80,6 +83,7 @@ "calories": 35, "description": "This serving of coffee has been created using an atomic coffee pot's FULL NUCLEAR brewing cycle. Every possible microgram of caffeine and flavor has been carefully extracted for your enjoyment, using the power of the atom.", "price": 300, + "price_postapoc": 100, "flags": [ "EATEN_HOT", "NUTRIENT_OVERRIDE" ], "fun": 10 }, @@ -96,6 +100,7 @@ "healthy": 1, "description": "A healthy beverage made from bee balm steeped in boiling water. Can be used to reduce negative effects of common cold or flu.", "price": 100, + "price_postapoc": 25, "fun": 1 }, { @@ -112,6 +117,7 @@ "calories": 470, "description": "A dense, sweet creamy sauce, often used in curries.", "price": 350, + "price_postapoc": 500, "material": "fruit", "volume": "500 ml", "phase": "liquid", @@ -136,6 +142,7 @@ "calories": 120, "description": "A traditional south Asian mixed-spice tea with milk.", "price": 475, + "price_postapoc": 50, "material": [ "milk", "water" ], "volume": "250 ml", "phase": "liquid", @@ -154,6 +161,7 @@ "healthy": 1, "description": "A healthy beverage made from chamomile flowers steeped in boiling water. Can be used to treat insomnia.", "price": 100, + "price_postapoc": 25, "fun": 1 }, { @@ -169,6 +177,7 @@ "calories": 116, "description": "A chocolate flavored beverage made of artificial flavoring and milk byproducts. Shelf stable and vaguely appetizing even when lukewarm.", "price": 100, + "price_postapoc": 50, "material": [ "junk", "milk" ], "volume": "250 ml", "phase": "liquid", @@ -193,6 +202,7 @@ "calories": 2, "description": "The morning ritual of the pre-apocalyptic world, created from coffee cherries through a complex process of seed removal, roasting, grinding, and brewing. Coffee is substantially richer in caffeine than its rival tea.", "price": 100, + "price_postapoc": 50, "material": "water", "volume": "250 ml", "phase": "liquid", @@ -213,6 +223,7 @@ "addiction_type": "caffeine", "description": "Homemade not-coffee created from the Kentucky coffeetree, just like the Meskwaki tribe! Doesn't actually have any caffeine, and is very bitter, but it'll pass in a pinch.", "price": 100, + "price_postapoc": 25, "material": "water", "volume": "250 ml", "phase": "liquid", @@ -232,6 +243,7 @@ "calories": 11, "description": "Toasted, ground chicory root steeped in boiling water. This bitter brew is used as a coffee substitute, though it tastes nothing like coffee.", "price": 125, + "price_postapoc": 25, "volume": "250 ml", "material": [ "water" ], "phase": "liquid", @@ -256,6 +268,7 @@ "calories": 98, "description": "Things go better with cola. Sugar water with caffeine added.", "price": 95, + "price_postapoc": 50, "material": "junk", "primary_material": "water", "volume": "250 ml", @@ -281,6 +294,7 @@ "calories": 115, "description": "It tastes and looks like windshield wiper fluid, but it's loaded to the brim with sugar and caffeine.", "price": 100, + "price_postapoc": 50, "material": "junk", "primary_material": "water", "volume": "250 ml", @@ -306,6 +320,7 @@ "calories": 126, "description": "A caffeinated, carbonated drink, flavored with vanilla.", "price": 95, + "price_postapoc": 50, "material": "junk", "primary_material": "water", "volume": "250 ml", @@ -328,6 +343,7 @@ "calories": 112, "description": "Made from real Massachusetts cranberries. Delicious and nutritious.", "price": 80, + "price_postapoc": 50, "material": "fruit", "primary_material": "water", "volume": "250 ml", @@ -349,6 +365,7 @@ "calories": 105, "description": "Mixing cranberry juice and lemon-lime soda works out quite well.", "price": 110, + "price_postapoc": 50, "material": [ "junk", "fruit" ], "primary_material": "water", "volume": "250 ml", @@ -370,6 +387,7 @@ "calories": 9, "description": "A healthy beverage made from dandelion roots steeped in boiling water.", "price": 50, + "price_postapoc": 25, "volume": "250 ml", "material": [ "water" ], "phase": "liquid", @@ -389,6 +407,7 @@ "calories": 12, "description": "A healthy beverage made from dandelion and burdock roots steeped in boiling water. The additional ingredient makes it slightly healthier and fun.", "price": 50, + "price_postapoc": 25, "volume": "250 ml", "material": [ "water" ], "phase": "liquid", @@ -409,6 +428,7 @@ "calories": 118, "description": "Smooth and rich, this spoon-coating mix of milk, cream, and eggs is a popular traditional holiday drink. While often spiked, it is still delicious on its own. Meant to be stored cold, it will spoil rapidly.", "price": 40, + "price_postapoc": 100, "material": [ "milk", "egg" ], "volume": "250 ml", "phase": "liquid", @@ -435,6 +455,7 @@ "calories": 157, "description": "A heavily caffeinated soft drink. Energy drinks are popular among those who need to stay up late working.", "price": 170, + "price_postapoc": 50, "material": "junk", "primary_material": "water", "volume": "250 ml", @@ -456,6 +477,7 @@ "addiction_potential": 9, "description": "According to the label, this loathsome-tasting beverage is called ATOMIC POWER THIRST. Alongside the lengthy health warning, it promises to make the consumer UNCOMFORTABLY ENERGETIC using ELECTROLYTES and THE POWER OF THE ATOM.", "price": 1500, + "price_postapoc": 150, "//": "Check whether Rivtech-Expensive applies to their energy drinks", "fun": -1 }, @@ -473,6 +495,7 @@ "calories": 2, "description": "A healthy beverage made from herbs steeped in boiling water.", "price": 100, + "price_postapoc": 25, "volume": "250 ml", "material": [ "water" ], "phase": "liquid", @@ -489,6 +512,7 @@ "weight": "289 g", "volume": "250 ml", "price": 285, + "price_postapoc": 50, "phase": "liquid", "container": "bottle_plastic", "material": [ "milk", "junk" ], @@ -518,6 +542,7 @@ "calories": 32, "description": "Freshly-squeezed from real fruit! Tasty and nutritious.", "price": 80, + "price_postapoc": 50, "material": "fruit", "primary_material": "water", "volume": "250 ml", @@ -542,6 +567,7 @@ "calories": 135, "description": "Clear juice obtained by cooking fruit in a large volume of water.", "price": 62, + "price_postapoc": 50, "material": "fruit", "primary_material": "water", "volume": "250 ml", @@ -564,6 +590,7 @@ "calories": 104, "description": "Lemon juice mixed with water and sugar to dull the sourness. Delicious and refreshing.", "price": 80, + "price_postapoc": 50, "material": "fruit", "primary_material": "water", "volume": "250 ml", @@ -586,6 +613,7 @@ "calories": 105, "description": "Unlike cola this is caffeine free, however it is still carbonated and has plenty of sugar. Not to mention a lemon-lime taste.", "price": 95, + "price_postapoc": 50, "material": "junk", "primary_material": "water", "volume": "250 ml", @@ -602,6 +630,7 @@ "weight": "263 g", "volume": "250 ml", "price": 335, + "price_postapoc": 50, "phase": "liquid", "container": "bottle_plastic", "material": [ "milk", "junk" ], @@ -630,6 +659,7 @@ "calories": 132, "description": "Baby cow food, appropriated for adult humans. Spoils rapidly.", "price": 38, + "price_postapoc": 50, "//": "A 12-charge gallon currently goes for around US$4.", "material": [ "milk" ], "volume": "250 ml", @@ -663,6 +693,7 @@ "calories": 69, "description": "Coffee syrup mixed into milk. It's been the state drink of Rhode Island since 1993.", "price": 480, + "price_postapoc": 50, "material": [ "milk", "water" ], "primary_material": "milk", "volume": "500 ml", @@ -688,6 +719,7 @@ "calories": 69, "description": "Hot tea with cold milk.", "price": 450, + "price_postapoc": 50, "material": [ "milk", "water" ], "primary_material": "water", "volume": "500 ml", @@ -711,6 +743,7 @@ "calories": 108, "description": "Freshly-squeezed from real oranges! Tasty and nutritious.", "price": 90, + "price_postapoc": 50, "material": "fruit", "primary_material": "water", "volume": "250 ml", @@ -734,6 +767,7 @@ "calories": 119, "description": "Unlike cola this is caffeine free, however it is still carbonated, sweet, and tastes vaguely orange-like.", "price": 95, + "price_postapoc": 50, "material": "junk", "primary_material": "water", "volume": "250 ml", @@ -753,6 +787,7 @@ "healthy": 3, "description": "A fragrant and healthy beverage made from pine needles steeped in boiling water.", "price": 0, + "price_postapoc": 25, "volume": "250 ml", "material": [ "water" ], "phase": "liquid", @@ -775,6 +810,7 @@ "calories": 63, "description": "A mass-produced grape flavored beverage of artificial origin. Good for when you want something that tastes like fruit, but still don't care about your health.", "price": 85, + "price_postapoc": 50, "material": "junk", "primary_material": "water", "volume": "250 ml", @@ -797,6 +833,7 @@ "calories": 106, "description": "Like cola, but without caffeine. Still not that healthy.", "price": 95, + "price_postapoc": 50, "material": "junk", "primary_material": "water", "volume": "250 ml", @@ -821,6 +858,7 @@ "calories": 100, "description": "Originating in Germany almost a century ago, this mix of cola and orange soda tastes great.", "price": 100, + "price_postapoc": 50, "material": "junk", "primary_material": "water", "volume": "250 ml", @@ -841,6 +879,7 @@ "calories": 66, "description": "Consisting of a special blend of electrolytes and simple sugars, this beverage tastes like bottled sweat but rehydrates the body faster than water.", "price": 55, + "price_postapoc": 50, "material": "water", "volume": "250 ml", "phase": "liquid", @@ -861,6 +900,7 @@ "calories": 12, "description": "A basic oral rehydration therapy drink. It will rehydrate you faster than water, but it tastes kind of strange.", "price": 55, + "price_postapoc": 50, "material": "water", "volume": "250 ml", "looks_like": "sports_drink", @@ -880,6 +920,7 @@ "calories": 17, "description": "Water with sugar or honey added. Tastes okay.", "price": 95, + "price_postapoc": 10, "material": "water", "volume": "250 ml", "phase": "liquid", @@ -901,6 +942,7 @@ "calories": 2, "description": "The beverage of gentlemen everywhere, made from applying hot water to leaves of the tea plant /Camellia sinensis/.", "price": 90, + "price_postapoc": 25, "volume": "250 ml", "material": [ "water" ], "phase": "liquid", @@ -920,6 +962,7 @@ "quench": -35, "description": "Often regarded as folk medicine in some countries, bark tea tastes awful and tends to dry you out, but can help flush out stomach or other gut bugs.", "price": 1250, + "price_postapoc": 25, "volume": "500 ml", "material": [ "water" ], "phase": "liquid", @@ -941,6 +984,7 @@ "calories": 51, "description": "Contains up to eight vegetables! Nutritious and tasty.", "price": 40, + "price_postapoc": 50, "material": "veggy", "primary_material": "water", "volume": "250 ml", diff --git a/data/json/items/comestibles/drink_other.json b/data/json/items/comestibles/drink_other.json index c58aca6b47dce..6e3ada3405a7b 100644 --- a/data/json/items/comestibles/drink_other.json +++ b/data/json/items/comestibles/drink_other.json @@ -13,6 +13,7 @@ "calories": 21, "description": "A minimally seasoned sauce of cooked tomatoes.", "price": 4, + "price_postapoc": 50, "//": "Small cans--needs upsized after the string freeze.", "material": "tomato", "volume": "500 ml", @@ -30,6 +31,7 @@ "copy-from": "syrup", "description": "A water and sugar solution that has been extracted from a maple tree.", "price": 50, + "price_postapoc": 25, "weight": "250 g", "volume": "250 ml", "charges": 1, @@ -53,6 +55,7 @@ "name": { "str": "mayonnaise", "str_pl": "mayonnaise" }, "description": "A gloppy mix of egg, oil, and salt that is traditionally used to moisten sandwiches.", "price": 187, + "price_postapoc": 500, "material": [ "junk", "egg" ], "weight": "15 g", "volume": "250 ml", @@ -74,6 +77,7 @@ "name": "ketchup", "description": "A viscous paste of tomato, salt, and vinegar.", "price": 1875, + "price_postapoc": 100, "material": [ "veggy", "junk" ], "weight": "18 g", "volume": "250 ml", @@ -93,6 +97,7 @@ "name": { "str": "mustard", "str_pl": "mustard" }, "description": "A condiment made from the seeds of a mustard plant (/Brassica/ or /Sinapis/), vinegar, salt, and spices.", "price": 50, + "price_postapoc": 100, "material": "junk", "weight": "5 g", "volume": "250 ml", @@ -113,6 +118,7 @@ "name": { "str": "forest honey", "str_pl": "forest honey" }, "description": "Honey, that stuff bees make. This one is \"forest honey\", a liquid form of honey. This honey won't spoil and is good for your digestion.", "price": 250, + "price_postapoc": 750, "material": "honey", "weight": "22 g", "volume": "250 ml", @@ -135,6 +141,7 @@ "name": "peanut butter", "description": "A brown goo that tastes very little like its namesake. It's not bad, but it'll stick to the roof of your mouth.", "price": 195, + "price_postapoc": 1000, "//": "Two tablespoons per charge.", "weight": "50 g", "volume": "250 ml", @@ -167,6 +174,7 @@ "symbol": "~", "description": "Shockingly tart white vinegar. This is what you get when you let your booze ferment too long.", "price": 500, + "price_postapoc": 50, "material": "water", "volume": "250 ml", "phase": "liquid", @@ -187,6 +195,7 @@ "calories": 127, "description": "Thin yellow vegetable oil used for cooking.", "price": 40, + "price_postapoc": 500, "material": [ "oil", "veggy" ], "volume": "250 ml", "charges": 16, @@ -219,6 +228,7 @@ "calories": 258, "description": "An extremely sugary tar-like syrup, produced by repeatedly boiling the juice of sugarcane or sugar beets. It has a slightly bitter aftertaste.", "price": 200, + "price_postapoc": 500, "material": "junk", "volume": "250 ml", "phase": "liquid", @@ -236,6 +246,7 @@ "name": { "str": "horseradish", "str_pl": "horseradish" }, "description": "A spicy grated root vegetable packed in vinegared brine.", "price": 75, + "price_postapoc": 100, "material": "veggy", "weight": "6 g", "volume": "250 ml", @@ -265,6 +276,7 @@ "addiction_potential": 1, "description": "A thick syrup made of water and sugar strained through coffee grounds. Can be used to flavor many foods and beverages.", "price": 800, + "price_postapoc": 100, "material": "junk", "volume": "250 ml", "phase": "liquid", diff --git a/data/json/items/comestibles/egg.json b/data/json/items/comestibles/egg.json index 4a565d6b96a93..a25906a1f7503 100644 --- a/data/json/items/comestibles/egg.json +++ b/data/json/items/comestibles/egg.json @@ -13,6 +13,7 @@ "calories": 80, "description": "Nutritious egg laid by a bird.", "price": 44, + "price_postapoc": 50, "material": "egg", "volume": "50 ml", "stack_size": 1, @@ -105,6 +106,7 @@ "calories": 87, "description": "An egg belonging to one of reptile species found in New England.", "price": 250, + "price_postapoc": 50, "material": "egg", "volume": "250 ml", "stack_size": 4, @@ -123,6 +125,7 @@ "quench": 10, "description": "A large white ant egg, the size of a softball. Extremely nutritious, but incredibly gross.", "price": 175, + "price_postapoc": 500, "material": "egg", "volume": "600 ml", "fun": -10, @@ -141,6 +144,7 @@ "quench": 10, "description": "A fist-sized egg from a giant spider. Incredibly gross.", "price": 80, + "price_postapoc": 200, "material": "egg", "volume": "250 ml", "proportional": { "weight": 4.4, "calories": 4.4 }, @@ -197,6 +201,7 @@ "calories": 338, "description": "A clump of razorclaw eggs. A post-Cataclysm delicacy.", "price": 3000, + "price_postapoc": 750, "material": "flesh", "volume": "250 ml", "vitamins": [ [ "vitA", 24 ], [ "vitC", 42 ], [ "calcium", 5 ], [ "iron", 8 ], [ "vitB", 985 ] ], @@ -217,6 +222,7 @@ "calories": 34, "description": "Common roe from an unknown fish.", "price": 50, + "price_postapoc": 100, "material": "egg", "volume": "25 ml", "stack_size": 4, @@ -237,6 +243,7 @@ "calories": 80, "description": "Whole fresh eggs, dehydrated into an easy to store powder.", "price": 1120, + "price_postapoc": 750, "material": [ "powder", "egg" ], "primary_material": "powder", "volume": "250 ml", @@ -255,6 +262,7 @@ "symbol": "%", "description": "Fluffy and delicious scrambled eggs.", "price": 400, + "price_postapoc": 100, "material": "egg", "volume": "125 ml", "charges": 2, @@ -271,6 +279,7 @@ "quench": -1, "description": "A hard-boiled egg, still in its shell. Portable and nutritious!", "price": 95, + "price_postapoc": 50, "material": "egg", "fun": 2, "flags": [ "FREEZERBURN" ] @@ -286,6 +295,7 @@ "quench": -1, "description": "A pickled egg. Rather salty, but tastes good and lasts for a long time.", "price": 95, + "price_postapoc": 75, "material": "egg", "fun": 2, "flags": [ "FREEZERBURN" ] diff --git a/data/json/items/comestibles/frozen.json b/data/json/items/comestibles/frozen.json index f3ad0070153d9..48325d0bd1ec2 100644 --- a/data/json/items/comestibles/frozen.json +++ b/data/json/items/comestibles/frozen.json @@ -17,6 +17,7 @@ "fun": 20, "healthy": -1, "price": 250, + "price_postapoc": 100, "material": "milk", "phase": "liquid", "charges": 2, @@ -33,6 +34,7 @@ "fun": 23, "healthy": -3, "price": 275, + "price_postapoc": 100, "material": [ "milk", "junk" ], "primary_material": "milk" }, @@ -47,6 +49,7 @@ "fun": 25, "healthy": -6, "price": 400, + "price_postapoc": 150, "material": [ "milk", "junk" ], "primary_material": "milk" }, @@ -66,6 +69,7 @@ "fun": 15, "healthy": -1, "price": 250, + "price_postapoc": 300, "material": "milk", "primary_material": "ice_cream", "phase": "liquid", @@ -82,6 +86,7 @@ "description": "Government regulations dictate that since this isn't *technically* ice cream, it can be called a dairy dessert instead. It still tastes good, but your body won't like you.", "healthy": -2, "price": 200, + "price_postapoc": 100, "primary_material": "ice_cream", "material": [ "milk", "junk" ] }, @@ -94,6 +99,7 @@ "fun": 20, "healthy": -3, "price": 300, + "price_postapoc": 300, "calories": 330, "primary_material": "ice_cream", "vitamins": [ [ "vitA", 9 ], [ "calcium", 8 ], [ "iron", 4 ], [ "vitB", 8 ] ], @@ -109,6 +115,7 @@ "calories": 224, "fun": 17, "price": 300, + "price_postapoc": 300, "primary_material": "ice_cream", "vitamins": [ [ "vitA", 8 ], [ "vitC", 6 ], [ "calcium", 8 ], [ "iron", 1 ], [ "vitB", 9 ] ], "material": [ "milk", "fruit" ] @@ -122,6 +129,7 @@ "spoils_in": "2 days", "calories": 328, "price": 300, + "price_postapoc": 300, "primary_material": "ice_cream", "vitamins": [ [ "vitA", 1 ], [ "calcium", 8 ], [ "vitB", 10 ] ], "material": [ "milk", "egg" ] @@ -134,6 +142,7 @@ "description": "Tarter than ice cream, this is made with yogurt and other dairy products, and is generally low-fat compared to ice cream itself.", "calories": 127, "price": 275, + "price_postapoc": 100, "weight": "80 g", "primary_material": "ice_cream", "vitamins": [ [ "vitC", 4 ], [ "calcium", 10 ] ], @@ -150,6 +159,7 @@ "quench": 8, "fun": 10, "price": 175, + "price_postapoc": 100, "weight": "106 g", "vitamins": [ ], "material": [ "water", "fruit" ] @@ -162,6 +172,7 @@ "description": "Italian-style ice cream. Less airy, and more dense, giving it a richer flavor and texture.", "calories": 240, "price": 300, + "price_postapoc": 200, "weight": "90 g", "primary_material": "ice_cream", "vitamins": [ [ "calcium", 2 ], [ "iron", 2 ] ], diff --git a/data/json/items/comestibles/fruit_dishes.json b/data/json/items/comestibles/fruit_dishes.json index 0f436a999b9d0..b0d8f6dfb68fe 100644 --- a/data/json/items/comestibles/fruit_dishes.json +++ b/data/json/items/comestibles/fruit_dishes.json @@ -11,6 +11,7 @@ "symbol": "~", "description": "It's like strawberry jam, only without sugar.", "price": 50, + "price_postapoc": 50, "//": "Cheap for three liters of spread!", "material": "fruit", "phase": "liquid", @@ -30,6 +31,7 @@ "calories": 122, "description": "Dried strips of sugary fruit paste.", "price": 160, + "price_postapoc": 250, "material": "fruit", "primary_material": "dried_vegetable", "volume": "250 ml", @@ -50,6 +52,7 @@ "symbol": "~", "description": "It's like blueberry jam, only without sugar.", "price": 50, + "price_postapoc": 50, "material": "fruit", "phase": "liquid", "fun": 3, @@ -69,6 +72,7 @@ "calories": 205, "description": "Yellow cling peach slices packed in light syrup.", "price": 140, + "price_postapoc": 150, "material": "fruit", "volume": "250 ml", "fun": 5, @@ -89,6 +93,7 @@ "calories": 104, "description": "Canned pineapple rings in water. Quite tasty.", "price": 400, + "price_postapoc": 150, "material": "fruit", "volume": "500 ml", "fun": 7, @@ -108,6 +113,7 @@ "calories": 104, "description": "Tangy yellow powder that smells strongly of lemons. Can be mixed with water to make lemonade.", "price": 10, + "price_postapoc": 10, "material": [ "powder", "fruit" ], "primary_material": "powder", "volume": "250 ml", @@ -129,6 +135,7 @@ "calories": 100, "description": "It's like fruit jam, only without sugar.", "price": 50, + "price_postapoc": 50, "material": "fruit", "volume": "250 ml", "phase": "liquid", @@ -150,6 +157,7 @@ "calories": 35, "description": "Fresh fruit, cooked with sugar to make them last longer.", "price": 80, + "price_postapoc": 75, "material": "fruit", "volume": "250 ml", "phase": "liquid", @@ -171,6 +179,7 @@ "calories": 100, "description": "Dehydrated fruit flakes. With proper storage, this dried food will remain edible for an incredibly long time. They are useful for several cooking recipes.", "price": 900, + "price_postapoc": 100, "material": "fruit", "primary_material": "dried_vegetable", "//": "most of the water weight and volume is lost", @@ -192,6 +201,7 @@ "calories": 100, "description": "Reconstituted fruit flakes, which are much more enjoyable to eat now that they have been rehydrated.", "price": 900, + "price_postapoc": 50, "material": "fruit", "volume": "250 ml", "fun": 4 @@ -232,6 +242,7 @@ "calories": 275, "description": "This sodden mass of preserved fruit was boiled and canned in an earlier life. Bland, mushy and losing color.", "price": 220, + "price_postapoc": 50, "material": "fruit", "volume": "250 ml", "stack_size": 2, diff --git a/data/json/items/comestibles/irradiated_veggy.json b/data/json/items/comestibles/irradiated_veggy.json index 7019d3f402c22..bda859268dd8a 100644 --- a/data/json/items/comestibles/irradiated_veggy.json +++ b/data/json/items/comestibles/irradiated_veggy.json @@ -113,6 +113,7 @@ "calories": 95, "description": "An irradiated cucumber will remain edible nearly forever. Sterilized using radiation, so it's safe to eat.", "price": 320, + "price_postapoc": 100, "material": "veggy", "flags": [ "FREEZERBURN", "SMOKABLE" ], "volume": "250 ml" @@ -130,6 +131,7 @@ "calories": 43, "description": "An irradiated cluster of celery will remain edible nearly forever. Sterilized using radiation, so it's safe to eat.", "price": 220, + "price_postapoc": 50, "material": "veggy", "volume": "250 ml" }, diff --git a/data/json/items/comestibles/junkfood.json b/data/json/items/comestibles/junkfood.json index e690a1ac417f7..f52b3dd312341 100644 --- a/data/json/items/comestibles/junkfood.json +++ b/data/json/items/comestibles/junkfood.json @@ -13,6 +13,7 @@ "calories": 200, "description": "Dry toaster pastries usually coated with solid frosting and what luck! These are strawberry flavored!", "price": 400, + "price_postapoc": 1000, "material": [ "wheat", "junk" ], "volume": "1 L", "charges": 8, @@ -50,6 +51,7 @@ "calories": 200, "description": "A delicious fruit-filled pastry that you can cook in your toaster. It even comes with frosting! Cook it to make it tasty.", "price": 400, + "price_postapoc": 125, "material": [ "wheat", "junk" ], "volume": "250 ml", "charges": 2, @@ -95,6 +97,7 @@ "calories": 120, "description": "Dried kernels from a particular type of corn. Practically inedible raw, they can be cooked to make a tasty snack.", "price": 100, + "price_postapoc": 400, "material": "junk", "volume": "250 ml", "charges": 8, @@ -116,6 +119,7 @@ "calories": 30, "description": "Plain and unseasoned popcorn. Not as tasty as other kinds, but healthier as a result.", "price": 115, + "price_postapoc": 25, "material": "veggy", "volume": "1 L", "charges": 4, @@ -158,6 +162,7 @@ "calories": 237, "description": "A salty treat of a snack.", "price": 185, + "price_postapoc": 300, "material": [ "wheat", "junk" ], "volume": "250 ml", "flags": [ "EDIBLE_FROZEN" ], @@ -179,6 +184,7 @@ "calories": 377, "description": "A salty treat of a snack, covered in chocolate.", "price": 200, + "price_postapoc": 350, "material": [ "wheat", "junk" ], "volume": "500 ml", "flags": [ "EDIBLE_FROZEN" ], @@ -198,6 +204,7 @@ "calories": 140, "description": "Chocolate isn't very healthy, but it does make a delicious treat.", "price": 130, + "price_postapoc": 200, "material": "junk", "volume": "250 ml", "charges": 3, @@ -217,6 +224,7 @@ "calories": 168, "description": "A handful of squishy, fluffy, puffy, delicious marshmallows.", "price": 250, + "price_postapoc": 100, "material": "junk", "volume": "250 ml", "flags": [ "EDIBLE_FROZEN" ], @@ -235,6 +243,7 @@ "calories": 418, "description": "A pair of graham crackers with some chocolate and a marshmallow between them.", "price": 400, + "price_postapoc": 250, "material": [ "wheat", "junk" ], "volume": "250 ml", "flags": [ "EDIBLE_FROZEN" ], @@ -256,6 +265,7 @@ "calories": 209, "description": "A handful of peanut butter cups… your favorite!", "price": 180, + "price_postapoc": 150, "material": "junk", "volume": "250 ml", "flags": [ "EDIBLE_FROZEN" ], @@ -276,6 +286,7 @@ "calories": 287, "description": "A handful of colorful chocolate filled candies.", "price": 180, + "price_postapoc": 400, "material": "junk", "volume": "250 ml", "flags": [ "EDIBLE_FROZEN" ], @@ -297,6 +308,7 @@ "calories": 85, "description": "A handful of colorful fruit-flavored chewy candy.", "price": 180, + "price_postapoc": 200, "material": "junk", "volume": "250 ml", "flags": [ "EDIBLE_FROZEN" ], @@ -317,6 +329,7 @@ "calories": 180, "description": "Thin paper tubes of sweet & sour candy powder. Who thinks of this stuff?", "price": 120, + "price_postapoc": 300, "material": "junk", "volume": "250 ml", "flags": [ "EDIBLE_FROZEN" ], @@ -338,6 +351,7 @@ "calories": 54, "description": "This golden, translucent leaf candy is made with pure maple syrup and melt slowly as you savor the taste of real maple.", "price": 600, + "price_postapoc": 50, "material": "junk", "volume": "100 ml", "flags": [ "EDIBLE_FROZEN" ], @@ -358,6 +372,7 @@ "calories": 110, "description": "Dry and sugary, these crackers will leave you thirsty, but go good with some chocolate and marshmallows.", "price": 110, + "price_postapoc": 300, "material": [ "wheat", "junk" ], "volume": "750 ml", "flags": [ "EDIBLE_FROZEN" ], @@ -379,6 +394,7 @@ "calories": 160, "description": "Sweet and delicious cookies, just like grandma used to bake.", "price": 195, + "price_postapoc": 150, "material": [ "wheat", "junk" ], "volume": "250 ml", "charges": 4, @@ -400,6 +416,7 @@ "calories": 54, "description": "Boiling the sap of a maple tree has concentrated it into sweet, delicious maple syrup.", "price": 600, + "price_postapoc": 750, "material": "junk", "volume": "250 ml", "phase": "liquid", @@ -421,6 +438,7 @@ "calories": 45, "description": "A thick syrup produced from shredded sugar beets. Useful in cooking as a sweetener.", "price": 1500, + "price_postapoc": 350, "material": "junk", "volume": "250 ml", "phase": "liquid", @@ -439,6 +457,7 @@ "calories": 110, "description": "Delicious sponge cake with buttercream icing, it says happy birthday on it.", "price": 120, + "price_postapoc": 200, "material": [ "wheat", "junk" ], "volume": "2 L", "charges": 12, @@ -481,6 +500,7 @@ "calories": 140, "description": "Roasted coffee beans coated with dark chocolate, natural source of concentrated caffeine.", "price": 300, + "price_postapoc": 300, "material": [ "veggy", "junk" ], "volume": "250 ml", "charges": 5, @@ -502,6 +522,7 @@ "calories": 229, "description": "Fast-food fried potatoes. Somehow, they're still edible.", "price": 120, + "price_postapoc": 50, "material": "junk", "volume": "250 ml", "fun": 4, @@ -531,6 +552,7 @@ "calories": 165, "description": "A handful of soft chocolate-covered peppermint patties… yum!", "price": 130, + "price_postapoc": 150, "material": "junk", "volume": "250 ml", "flags": [ "EDIBLE_FROZEN" ], @@ -552,6 +574,7 @@ "calories": 220, "description": "A handful of candy wafers, in assorted flavors: orange, lemon, lime, clove, chocolate, wintergreen, cinnamon, and licorice. Yum!", "price": 100, + "price_postapoc": 100, "material": "junk", "volume": "40 ml", "flags": [ "EDIBLE_FROZEN" ], @@ -572,6 +595,7 @@ "calories": 130, "description": "Candy sticks. Slightly more healthy than tobacco cigarettes, but with no possibility of addiction.", "price": 130, + "price_postapoc": 100, "material": "junk", "volume": "250 ml", "flags": [ "EDIBLE_FROZEN" ], @@ -592,6 +616,7 @@ "calories": 257, "description": "Some caramel. Still bad for your health.", "price": 150, + "price_postapoc": 500, "material": "junk", "volume": "250 ml", "charges": 5, @@ -612,6 +637,7 @@ "calories": 149, "description": "Betcha can't eat just one.", "price": 180, + "price_postapoc": 200, "material": "junk", "volume": "250 ml", "flags": [ "EDIBLE_FROZEN" ], @@ -633,6 +659,7 @@ "calories": 145, "description": "Sugary breakfast cereal with marshmallows. It takes you back to your childhood.", "price": 400, + "price_postapoc": 100, "material": "junk", "volume": "250 ml", "flags": [ "EDIBLE_FROZEN" ], @@ -653,6 +680,7 @@ "calories": 155, "description": "Plain cornflake cereal. They're not that good, but it beats nothing.", "price": 300, + "price_postapoc": 75, "material": "junk", "volume": "250 ml", "flags": [ "EDIBLE_FROZEN" ], @@ -673,6 +701,7 @@ "calories": 280, "description": "Salted chips made from corn tortillas, could really use some cheese, maybe some beef.", "price": 170, + "price_postapoc": 150, "material": "junk", "volume": "250 ml", "flags": [ "EDIBLE_FROZEN" ], @@ -693,6 +722,7 @@ "calories": 280, "description": "Salted chips made from corn tortillas, now with cheese. Could stand to have some meat.", "price": 250, + "price_postapoc": 200, "material": [ "junk", "milk" ], "primary_material": "wheat", "volume": "250 ml", @@ -722,6 +752,7 @@ "calories": 226, "description": "Salted chips made from corn tortillas, now with meat. Could probably use some cheese, though.", "price": 250, + "price_postapoc": 600, "material": [ "junk", "flesh" ], "volume": "750 ml", "charges": 3, @@ -755,6 +786,7 @@ "calories": 495, "description": "Salted chips made from corn tortillas with ground meat and smothered in cheese. Delicious.", "price": 300, + "price_postapoc": 500, "material": [ "flesh", "milk", "junk" ], "primary_material": "processed_food", "volume": "500 ml", @@ -776,6 +808,7 @@ "calories": 180, "description": "Salty dried pork. Tastes good, but it will make you thirsty.", "price": 220, + "price_postapoc": 200, "material": [ "flesh", "junk" ], "volume": "250 ml", "flags": [ "EDIBLE_FROZEN" ], @@ -798,6 +831,7 @@ "calories": 434, "description": "A small, microwaveable steak & cheese burrito, like those found at gas stations.", "price": 200, + "price_postapoc": 200, "material": [ "flesh", "junk", "milk" ], "primary_material": "processed_food", "volume": "250 ml", @@ -819,6 +853,7 @@ "calories": 313, "description": "Now with ONE POUND of meat and ONE POUND of carbs! Not as appetizing or nutritious as it would be if heated up.", "price": 320, + "price_postapoc": 300, "material": [ "flesh", "junk" ], "primary_material": "processed_food", "volume": "1 L", @@ -839,6 +874,7 @@ "calories": 313, "description": "Now with ONE POUND of meat and ONE POUND of carbs! Nice and heated up. It's tastier and more filling, but will also spoil quickly.", "price": 90, + "price_postapoc": 300, "material": [ "flesh", "junk" ], "primary_material": "processed_food", "volume": "1 L", @@ -860,6 +896,7 @@ "calories": 460, "description": "Chicken cooked while submerged in oil. It's greasy and delicious.", "price": 550, + "price_postapoc": 200, "material": [ "flesh", "junk" ], "volume": "1 L", "charges": 4, @@ -880,6 +917,7 @@ "calories": 353, "description": "A hot dog, served with chili con carne as a topping. Yum!", "price": 900, + "price_postapoc": 150, "material": [ "flesh", "junk", "wheat" ], "volume": "500 ml", "charges": 2, @@ -901,6 +939,7 @@ "calories": 195, "description": "A heavily processed sausage, dipped in batter and deep-fried. It would taste much better prepared.", "price": 900, + "price_postapoc": 150, "material": [ "flesh", "junk" ], "volume": "250 ml", "charges": 2, @@ -941,6 +980,7 @@ "calories": 219, "description": "Fluffy and delicious pancakes with real maple syrup, with delicious chocolate baked right in.", "price": 700, + "price_postapoc": 100, "material": [ "wheat", "junk", "milk" ], "primary_material": "processed_food", "fun": 6, @@ -958,6 +998,7 @@ "calories": 140, "description": "Crunchy and delicious waffles with real maple syrup, with delicious chocolate baked right in.", "price": 650, + "price_postapoc": 100, "material": [ "wheat", "junk", "milk" ], "primary_material": "processed_food", "volume": "250 ml", @@ -978,6 +1019,7 @@ "calories": 89, "description": "Processed cheese spread.", "price": 160, + "price_postapoc": 300, "material": [ "milk", "junk" ], "primary_material": "cheese", "volume": "250 ml", @@ -1000,6 +1042,7 @@ "calories": 348, "description": "Fried potatoes with delicious cheese smothered on top.", "price": 190, + "price_postapoc": 150, "material": [ "junk", "milk" ], "primary_material": "cheese", "volume": "250 ml", @@ -1021,6 +1064,7 @@ "calories": 639, "description": "Battered and fried onions. Crunchy and delicious.", "price": 400, + "price_postapoc": 250, "material": [ "veggy", "junk" ], "volume": "250 ml", "flags": [ "EATEN_HOT", "EDIBLE_FROZEN", "FREEZERBURN" ], @@ -1041,6 +1085,7 @@ "calories": 130, "description": "A heavily processed sausage, commonplace at baseball games before the Cataclysm. It would taste much better prepared.", "price": 800, + "price_postapoc": 450, "material": [ "flesh", "junk" ], "volume": "750 ml", "charges": 10, @@ -1072,6 +1117,7 @@ "calories": 407, "description": "Surprisingly, not made from dog. Cooked, this hot dog now tastes much better, but will spoil.", "price": 800, + "price_postapoc": 350, "material": [ "flesh", "junk", "wheat" ], "volume": "500 ml", "flags": [ "EATEN_HOT" ], @@ -1093,6 +1139,7 @@ "calories": 200, "description": "Crunchy sugar in chocolate capsules. The malt gives them a distinct, yet delicious flavor.", "price": 100, + "price_postapoc": 300, "material": [ "junk", "milk" ], "primary_material": "processed_food", "volume": "500 ml", diff --git a/data/json/items/comestibles/meat_dishes.json b/data/json/items/comestibles/meat_dishes.json index ebd4fc04333f2..2986fb629c480 100644 --- a/data/json/items/comestibles/meat_dishes.json +++ b/data/json/items/comestibles/meat_dishes.json @@ -18,6 +18,7 @@ "parasites": 32, "description": "A hefty raw sausage, prepared for smoking or cooking.", "price": 1600, + "price_postapoc": 200, "material": "flesh", "volume": "250 ml", "flags": [ "SMOKABLE" ], @@ -37,6 +38,7 @@ "parasites": 0, "healthy": 0, "spoils_in": "24 days", + "price_postapoc": 300, "description": "A hefty sausage that has been cured and smoked for long term storage.", "flags": [ "EATEN_HOT", "SMOKED" ], "fun": 5 @@ -54,6 +56,7 @@ "healthy": 0, "fun": 5, "spoils_in": "2 days", + "price_postapoc": 200, "description": "A hefty sausage that has been cooked.", "flags": [ "EATEN_HOT" ] }, @@ -72,6 +75,7 @@ "price": 2400, "material": "flesh", "volume": "250 ml", + "price_postapoc": 250, "vitamins": [ [ "vitA", 30 ], [ "vitC", 4 ], [ "iron", 22 ], [ "vitB", 36 ] ], "flags": [ "EATEN_HOT" ], "fun": 8 @@ -94,6 +98,7 @@ "calories": 297, "description": "A type of German sausage made of finely chopped meat and meant to be pan fried or roasted. Better eat it hot and fresh.", "price": 1800, + "price_postapoc": 1500, "material": "flesh", "volume": "500 ml", "charges": 10, @@ -114,6 +119,7 @@ "calories": 637, "description": "A chunk of meat with a coat of royal jelly over it. It's a lot like a honey-baked ham.", "price": 21000, + "price_postapoc": 4500, "material": "flesh", "volume": "500 ml", "fun": 7, @@ -134,6 +140,7 @@ "calories": 398, "description": "A thick slab of salty cured bacon. Shelf stable, precooked and ready-to-eat, it tastes better when reheated.", "price": 1900, + "price_postapoc": 500, "material": "flesh", "volume": "250 ml", "charges": 2, @@ -180,6 +187,7 @@ "calories": 270, "description": "Also known as pork rinds or chicharrones, these are bits of edible fat and skin that have been fried until they are crispy and delicious.", "price": 170, + "price_postapoc": 500, "material": "flesh", "volume": "250 ml", "charges": 4, @@ -201,6 +209,7 @@ "calories": 560, "description": "A tender piece of meat perfectly seasoned with a thin sweet glaze and its veggie accompaniments. A gourmet dish that is both healthy, sweet and delicious.", "price": 4000, + "price_postapoc": 1000, "material": [ "flesh", "veggy" ], "primary_material": "flesh", "volume": "750 ml", @@ -231,6 +240,7 @@ "calories": 260, "description": "Sausage covered in a curry ketchup sauce. Fairly spicy and impressive at the same time!", "price": 900, + "price_postapoc": 350, "material": "flesh", "volume": "250 ml", "charges": 2, @@ -255,6 +265,7 @@ "//": "Same as the meat it's been made from. It's additional ingredient compared to smoking, jerking, and dehydrating, so there's no incentive otherwise.", "description": "A dish in which meat or fish is set into a gelatin made from a meat or vegetable stock.", "price": 2500, + "price_postapoc": 150, "material": "flesh", "volume": "250 ml", "vitamins": [ [ "vitA", 10 ], [ "vitC", 15 ], [ "calcium", 2 ], [ "iron", 8 ] ], @@ -272,6 +283,7 @@ "quench": -3, "description": "Dehydrated fish flakes. With proper storage, this dried food will remain edible for an incredibly long time.", "price": 500, + "price_postapoc": 250, "volume": "125 ml", "flags": [ "EDIBLE_FROZEN" ] }, @@ -310,6 +322,7 @@ "healthy": 1, "description": "Low-sodium preserved fish. It was boiled and canned. Contains most of the nutrition, but little of the savor of cooked fish.", "price": 250, + "price_postapoc": 250, "fun": 2 }, { @@ -325,6 +338,7 @@ "calories": 748, "description": "A delicious golden brown serving of crispy fried fish.", "price": 500, + "price_postapoc": 400, "material": "flesh", "volume": "250 ml", "flags": [ "EATEN_HOT" ], @@ -346,6 +360,7 @@ "calories": 180, "description": "Meat that has been cooked, preserved, and cut into thin slices for convenient sandwich construction. It tastes fine cold.", "price": 14, + "price_postapoc": 75, "//": "*Looking for ~$6 per pound here.", "material": "flesh", "volume": "75 ml", @@ -370,6 +385,7 @@ "calories": 26, "description": "Formally known as Bologna sausage, this is a finely ground preserved meat that comes in circular slices. Its first name isn't Oscar. You can eat it cold.", "price": 1000, + "price_postapoc": 250, "material": "flesh", "volume": "750 ml", "charges": 10, @@ -390,6 +406,7 @@ "calories": 260, "description": "Lutefisk is preserved fish that has been dried in a lye solution. Vile and soap-like yet highly nutritious, it is reminiscent of the afterbirth of a dog or the world's largest chunk of phlegm.", "price": 200, + "price_postapoc": 250, "material": "flesh", "primary_material": "cured_meat", "volume": "250 ml", @@ -412,6 +429,7 @@ "calories": 180, "description": "A canned pork product that is unnaturally pink, oddly rubbery, and not very tasty, this SPAM remains quite filling. Completely unappetizing, but quite filling.", "price": 400, + "price_postapoc": 300, "material": "flesh", "volume": "500 ml", "charges": 6, @@ -443,6 +461,7 @@ "calories": 340, "description": "Salty little fish. They'll make you thirsty.", "price": 200, + "price_postapoc": 300, "material": "flesh", "volume": "250 ml", "flags": [ "EATEN_HOT" ], @@ -467,6 +486,7 @@ "calories": 363, "description": "Biscuits, meat, and delicious mushroom soup all crammed together into a wonderfully greasy and tasteful mush.", "price": 1000, + "price_postapoc": 200, "material": [ "flesh", "wheat", "mushroom" ], "volume": "250 ml", "flags": [ "EATEN_HOT" ], @@ -490,6 +510,7 @@ "calories": 440, "description": "A concentrated mixture of fat and protein used as a nutritious high-energy food. Composed of meat, tallow, and edible plants, it provides excellent nutrition in an easy to carry form.", "price": 600, + "price_postapoc": 350, "material": [ "flesh", "veggy" ], "volume": "250 ml", "vitamins": [ [ "vitC", 3 ], [ "calcium", 24 ], [ "iron", 14 ] ], @@ -514,6 +535,7 @@ "calories": 393, "description": "Some mac and cheese with ground meat added, enhancing the flavor and the nutritional value.", "price": 490, + "price_postapoc": 200, "material": [ "wheat", "flesh", "milk" ], "volume": "250 ml", "flags": [ "EATEN_HOT", "FREEZERBURN" ], @@ -533,6 +555,7 @@ "calories": 393, "description": "Meat encased in little dough satchels. Tastes fine raw.", "price": 250, + "price_postapoc": 200, "material": [ "flesh", "wheat" ], "volume": "500 ml", "flags": [ "EATEN_HOT" ], @@ -561,6 +584,7 @@ "calories": 299, "description": "A spicy stew containing chili peppers, meat, tomatoes and beans.", "price": 290, + "price_postapoc": 500, "material": [ "flesh", "veggy", "bean", "tomato" ], "volume": "500 ml", "flags": [ "EATEN_HOT" ], @@ -582,6 +606,7 @@ "calories": 283, "description": "Greasy Prospector improved pork and beans with hickory smoked pig fat chunks.", "price": 200, + "price_postapoc": 300, "material": [ "flesh", "bean" ], "volume": "500 ml", "charges": 2, @@ -602,6 +627,7 @@ "calories": 305, "description": "Now with 95 percent fewer dolphins!", "price": 200, + "price_postapoc": 300, "material": "flesh", "volume": "250 ml", "fun": 2, @@ -620,6 +646,7 @@ "calories": 276, "description": "Bright pink fish-paste in a can!", "price": 500, + "price_postapoc": 350, "material": "flesh", "volume": "250 ml", "fun": 1, @@ -638,6 +665,7 @@ "calories": 400, "description": "Bright white chicken-paste.", "price": 400, + "price_postapoc": 600, "material": "flesh", "volume": "500 ml", "charges": 2, @@ -657,6 +685,7 @@ "calories": 465, "description": "Fish fillets pickled in some sort of tangy white sauce.", "price": 310, + "price_postapoc": 700, "material": "flesh", "volume": "500 ml", "fun": 3, @@ -677,6 +706,7 @@ "calories": 240, "description": "Chopped quahog clams in water.", "price": 500, + "price_postapoc": 500, "material": "flesh", "volume": "250 ml", "fun": 2, @@ -700,6 +730,7 @@ "calories": 142, "description": "Delicious, lumpy, white soup made of meat (normally clam) and potatoes. A taste of the lost glory of New England.", "price": 400, + "price_postapoc": 400, "material": [ "flesh", "milk" ], "volume": "500 ml", "charges": 2, @@ -720,6 +751,7 @@ "calories": 373, "description": "Slow-cooked beans with meat. Tasty and very filling.", "price": 700, + "price_postapoc": 400, "material": [ "bean", "flesh" ], "volume": "1 L", "charges": 2, @@ -743,6 +775,7 @@ "calories": 313, "description": "Delicious fried rice with meat. Tasty and very filling.", "price": 700, + "price_postapoc": 400, "material": [ "veggy", "flesh" ], "volume": "1 L", "charges": 2, @@ -771,6 +804,7 @@ "calories": 414, "description": "Slow-cooked beans and rice with meat and seasonings. Tasty and very filling.", "price": 750, + "price_postapoc": 400, "material": [ "veggy", "bean", "flesh" ], "volume": "375 ml", "charges": 2, @@ -797,6 +831,7 @@ "calories": 400, "description": "A delicious baked pie with a delicious meat filling.", "price": 1350, + "price_postapoc": 2000, "material": [ "wheat", "flesh" ], "volume": "2 L", "charges": 8, @@ -821,6 +856,7 @@ "calories": 566, "description": "A meat pizza, for all the carnivores out there. Chock-full of minced meat and heavily seasoned.", "price": 1090, + "price_postapoc": 1000, "material": [ "wheat", "flesh" ], "volume": "1 L", "charges": 4, @@ -838,6 +874,7 @@ "calories": 641, "description": "A supreme pizza with ALL the toppings.", "price": 1500, + "price_postapoc": 1500, "material": [ "wheat", "flesh", "veggy", "milk" ], "fun": 11, "vitamins": [ [ "vitA", 12 ], [ "vitC", 20 ], [ "calcium", 32 ], [ "iron", 28 ] ] @@ -862,6 +899,7 @@ "calories": 279, "description": "Fluffy and delicious scrambled eggs made more delicious with the addition of other tasty ingredients.", "price": 700, + "price_postapoc": 450, "material": [ "egg", "flesh" ], "volume": "250 ml", "charges": 3, @@ -883,6 +921,7 @@ "container": "can_food", "description": "Low-sodium preserved meat. It was boiled and canned. Contains most of the nutrition, but little of the savor of cooked meat.", "price": 250, + "price_postapoc": 250, "flags": [ "EATEN_HOT" ], "fun": 2 }, @@ -901,6 +940,7 @@ "quench": -5, "description": "Meat slices cured in brine. Salty but tasty in a pinch.", "price": 500, + "price_postapoc": 300, "material": "flesh", "delete": { "flags": [ "NUTRIENT_OVERRIDE" ] }, "primary_material": "cured_meat", @@ -923,6 +963,7 @@ "calories": 226, "description": "Spaghetti covered with a thick meat sauce. Yum!", "price": 1000, + "price_postapoc": 1200, "material": [ "wheat", "flesh" ], "volume": "1750 ml", "charges": 8, @@ -948,6 +989,7 @@ "calories": 226, "description": "A very old type of pasta made with several layers of lasagne sheets alternated with cheese, sauces and meats.", "price": 1000, + "price_postapoc": 300, "material": [ "flesh", "wheat", "milk" ], "primary_material": "processed_food", "volume": "2 L", @@ -986,6 +1028,7 @@ "calories": 380, "description": "A sandwich of minced meat and cheese with condiments. The apex of pre-Cataclysm culinary achievement.", "price": 1000, + "price_postapoc": 250, "material": [ "flesh", "wheat", "milk" ], "primary_material": "processed_food", "volume": "500 ml", @@ -1010,6 +1053,7 @@ "calories": 258, "description": "A sandwich of minced meat with condiments.", "price": 900, + "price_postapoc": 200, "material": [ "flesh", "wheat" ], "volume": "500 ml", "flags": [ "EATEN_HOT" ], @@ -1033,6 +1077,7 @@ "calories": 391, "description": "A sandwich, consisting of ground meat and tomato sauce served on a hamburger bun.", "price": 900, + "price_postapoc": 250, "material": [ "flesh", "tomato", "wheat" ], "volume": "500 ml", "flags": [ "EATEN_HOT" ], @@ -1057,6 +1102,7 @@ "calories": 210, "description": "A traditional Mexican dish composed of a corn tortilla folded or rolled around a meat filling.", "price": 210, + "price_postapoc": 150, "material": "flesh", "volume": "250 ml", "fun": 8, @@ -1077,6 +1123,7 @@ "healthy": 1, "description": "This is a serving of crisply brined and canned meat. Tasty and nutritious.", "price": 250, + "price_postapoc": 300, "delete": { "flags": [ "NUTRIENT_OVERRIDE" ] }, "fun": 6 }, @@ -1095,6 +1142,7 @@ "quench": -3, "description": "Dehydrated meat flakes. With proper storage, this dried food will remain edible for an incredibly long time.", "price": 900, + "price_postapoc": 300, "material": "flesh", "primary_material": "cured_meat", "volume": "125 ml", @@ -1112,6 +1160,7 @@ "color": "light_red", "description": "Reconstituted meat flakes, which are much more enjoyable to eat now that they have been rehydrated.", "price": 900, + "price_postapoc": 100, "delete": { "flags": [ "NUTRIENT_OVERRIDE" ] }, "fun": 2 }, @@ -1131,6 +1180,7 @@ "calories": 441, "description": "This traditional Scottish savory pudding is made of meat and offal mixed with oatmeal, which is sewn into an animal's stomach and boiled. Surprisingly tasty and quite filling, it is best served with boiled root vegetables and strong whisky.", "price": 750, + "price_postapoc": 250, "material": [ "wheat", "flesh" ], "volume": "250 ml", "flags": [ "EATEN_HOT" ], @@ -1150,6 +1200,7 @@ "calories": 378, "description": "Delicious slivers of thinly sliced raw fish wrapped in tasty sushi rice and rolled up in a healthy green vegetable.", "price": 350, + "price_postapoc": 300, "material": [ "veggy", "flesh" ], "volume": "750 ml", "charges": 3, @@ -1170,6 +1221,7 @@ "calories": 417, "description": "Delicious slivers of raw meat wrapped in tasty sushi rice and rolled up in a healthy green vegetable.", "price": 370, + "price_postapoc": 300, "material": [ "veggy", "flesh" ], "volume": "1 L", "charges": 2, @@ -1187,6 +1239,7 @@ "calories": 160, "description": "Delicious slivers of thinly sliced raw fish and tasty vegetables.", "price": 600, + "price_postapoc": 300, "material": [ "veggy", "flesh" ], "fun": 7 }, @@ -1202,6 +1255,7 @@ "quench": -3, "description": "Pieces of poisonous meat that have been dried to prevent them from rotting away. It will still poison you if you eat this.", "price": 0, + "price_postapoc": 10, "material": "flesh", "volume": "125 ml", "flags": [ "EDIBLE_FROZEN" ], @@ -1221,6 +1275,7 @@ "calories": 300, "description": "Delicious cooked dumplings consisting of a meat filling wrapped in thin dough.", "price": 350, + "price_postapoc": 400, "material": [ "flesh", "wheat" ], "volume": "500 ml", "charges": 2, @@ -1242,6 +1297,7 @@ "calories": 292, "description": "A traditional Mexican dish of meat and vegetable stuffing put on a corn tortilla and rolled into a tube shape, like those you find in gas stations but homemade and delicious!", "price": 700, + "price_postapoc": 500, "material": [ "flesh", "veggy" ], "volume": "250 ml", "charges": 3, diff --git a/data/json/items/comestibles/med.json b/data/json/items/comestibles/med.json index b14cd2167296e..7efed0a402325 100644 --- a/data/json/items/comestibles/med.json +++ b/data/json/items/comestibles/med.json @@ -8,6 +8,7 @@ "weight": "1750 g", "volume": "1250 ml", "price": 3000, + "price_postapoc": 3000, "material": "plastic", "symbol": "!", "color": "red", @@ -23,10 +24,11 @@ "weight": "1 g", "volume": "250 ml", "price": 400, - "price_postapoc": 4000, + "price_postapoc": 1000, "stack_size": 30, "symbol": "!", "color": "yellow", + "flags": [ "IRREPLACEABLE_CONSUMABLE" ], "use_action": { "type": "consume_drug", "activation_message": "You pop a melatonin tablet.", @@ -42,6 +44,7 @@ "weight": "1 g", "volume": "250 ml", "price": 14500, + "price_postapoc": 1500, "charges": 10, "stack_size": 200, "symbol": "!", @@ -50,7 +53,7 @@ "fun": 10, "addiction_potential": 10, "addiction_type": "amphetamine", - "flags": [ "NPC_SAFE" ], + "flags": [ "NPC_SAFE", "IRREPLACEABLE_CONSUMABLE" ], "use_action": { "type": "consume_drug", "activation_message": "You take some adderall." } }, { @@ -62,11 +65,12 @@ "weight": "12 g", "volume": "10ml", "price": 3400, + "price_postapoc": 1000, "material": "plastic", "symbol": "!", "color": "pink", "use_action": "ADRENALINE_INJECTOR", - "flags": [ "NO_INGEST" ] + "flags": [ "NO_INGEST", "IRREPLACEABLE_CONSUMABLE" ] }, { "id": "antibiotics", @@ -77,12 +81,13 @@ "weight": "1 g", "volume": "250 ml", "price": 9000, + "price_postapoc": 40000, "charges": 15, "stack_size": 200, "symbol": "!", "color": "white", "use_action": "ANTIBIOTIC", - "flags": [ "NPC_SAFE" ] + "flags": [ "NPC_SAFE", "IRREPLACEABLE_CONSUMABLE" ] }, { "id": "antifungal", @@ -93,13 +98,14 @@ "weight": "1 g", "volume": "250 ml", "price": 1000, + "price_postapoc": 20000, "charges": 5, "stack_size": 100, "material": "powder", "symbol": "!", "color": "white", "use_action": "ANTIFUNGAL", - "flags": [ "NPC_SAFE" ] + "flags": [ "NPC_SAFE", "IRREPLACEABLE_CONSUMABLE" ] }, { "id": "antiparasitic", @@ -110,6 +116,7 @@ "weight": "1 g", "volume": "250 ml", "price": 3200, + "price_postapoc": 20000, "charges": 5, "stack_size": 100, "material": "powder", @@ -117,7 +124,7 @@ "color": "white", "healthy": -5, "use_action": "ANTIPARASITIC", - "flags": [ "NPC_SAFE" ] + "flags": [ "NPC_SAFE", "IRREPLACEABLE_CONSUMABLE" ] }, { "id": "aspirin", @@ -128,6 +135,7 @@ "weight": "1 g", "volume": "250 ml", "price": 500, + "price_postapoc": 5000, "charges": 20, "stack_size": 200, "material": "powder", @@ -149,6 +157,7 @@ "weight": "70 g", "volume": "250 ml", "price": 600, + "price_postapoc": 200, "material": "cotton", "symbol": "!", "color": "white", @@ -163,6 +172,7 @@ "name": "makeshift bandage", "copy-from": "bandages", "description": "Simple cloth bandages. Better than nothing.", + "price_postapoc": 100, "flags": [ "NO_INGEST" ], "use_action": { "type": "heal", "bandages_power": 2, "bleed": 0.9, "move_cost": 300 } }, @@ -172,6 +182,7 @@ "name": { "str": "bleached makeshift bandage" }, "copy-from": "bandages", "description": "Simple cloth bandages. It is white, as real bandages should be.", + "price_postapoc": 150, "flags": [ "NO_INGEST" ], "use_action": { "type": "heal", "bandages_power": 3, "bleed": 0.9, "move_cost": 300 } }, @@ -181,6 +192,7 @@ "name": { "str": "boiled makeshift bandage" }, "copy-from": "bandages", "description": "Simple cloth bandages. It was boiled to make it more sterile.", + "price_postapoc": 150, "flags": [ "NO_INGEST" ], "use_action": { "type": "heal", "bandages_power": 3, "bleed": 0.9, "move_cost": 300 } }, @@ -193,13 +205,14 @@ "weight": "6 g", "volume": "250 ml", "price": 900, + "price_postapoc": 4000, "charges": 4, "stack_size": 40, "material": "powder", "symbol": "!", "color": "white", "container": "bottle_plastic_small", - "flags": [ "NO_INGEST" ], + "flags": [ "NO_INGEST", "IRREPLACEABLE_CONSUMABLE" ], "use_action": { "type": "heal", "disinfectant_power": 4, "bite": 0.95, "move_cost": 100 } }, { @@ -212,6 +225,7 @@ "weight": "3 g", "volume": "250 ml", "price": 140, + "price_postapoc": 5000, "charges": 10, "stack_size": 100, "symbol": "*", @@ -230,6 +244,7 @@ "weight": "1 g", "volume": "250 ml", "price": 1000, + "price_postapoc": 1500, "charges": 10, "stack_size": 200, "material": "powder", @@ -249,6 +264,7 @@ "weight": "4 g", "volume": "250 ml", "price": 2000, + "price_postapoc": 1500, "charges": 20, "stack_size": 60, "symbol": "*", @@ -272,6 +288,7 @@ "weight": "28 g", "volume": "250 ml", "price": 100, + "price_postapoc": 500, "charges": 10, "symbol": "~", "color": "white", @@ -289,6 +306,7 @@ "weight": "1 g", "volume": "250 ml", "price": 800, + "price_postapoc": 1750, "charges": 20, "stack_size": 60, "symbol": "!", @@ -299,7 +317,7 @@ "fun": 5, "addiction_potential": 50, "addiction_type": "nicotine", - "flags": [ "NO_INGEST" ], + "flags": [ "NO_INGEST", "IRREPLACEABLE_CONSUMABLE" ], "use_action": "SMOKING" }, { @@ -311,6 +329,7 @@ "weight": "3 g", "volume": "250 ml", "price": 1000, + "price_postapoc": 500, "charges": 5, "symbol": "!", "color": "brown", @@ -319,7 +338,7 @@ "fun": 15, "addiction_potential": 50, "addiction_type": "nicotine", - "flags": [ "NO_INGEST" ], + "flags": [ "NO_INGEST", "IRREPLACEABLE_CONSUMABLE" ], "use_action": "SMOKING" }, { @@ -331,6 +350,7 @@ "weight": "240 g", "volume": "250 ml", "price": 3000, + "price_postapoc": 250, "material": "cotton", "symbol": "!", "color": "red", @@ -346,12 +366,14 @@ "weight": "1 g", "volume": "250 ml", "price": 1200, + "price_postapoc": 3000, "charges": 10, "stack_size": 200, "symbol": "!", "color": "cyan", "stim": -2, "fun": 10, + "flags": [ "IRREPLACEABLE_CONSUMABLE" ], "addiction_potential": 10, "addiction_type": "opiate", "use_action": { @@ -369,6 +391,7 @@ "weight": "1 g", "volume": "250 ml", "price": 10000, + "price_postapoc": 5000, "charges": 8, "stack_size": 100, "material": "powder", @@ -380,7 +403,7 @@ "fun": 25, "addiction_potential": 50, "addiction_type": "cocaine", - "flags": [ "NO_INGEST" ], + "flags": [ "NO_INGEST", "IRREPLACEABLE_CONSUMABLE" ], "use_action": "COKE" }, { @@ -402,6 +425,7 @@ "calories": 49, "description": "A potent cocktail of amphetamines, caffeine and corn syrup, this stuff puts a spring in your step, a fire in your eye, and a bad case of tachycardia tremors in your somersaulting heart.", "price": 9000, + "price_postapoc": 300, "material": "junk", "volume": "250 ml", "phase": "liquid", @@ -419,13 +443,14 @@ "weight": "1 g", "volume": "250 ml", "price": 2600, + "price_postapoc": 9000, "charges": 6, "stack_size": 36, "material": "plastic", "symbol": "[", "color": "cyan", "use_action": "CONTACTS", - "flags": [ "NO_INGEST", "NPC_SAFE" ] + "flags": [ "NO_INGEST", "NPC_SAFE", "IRREPLACEABLE_CONSUMABLE" ] }, { "id": "cotton_ball", @@ -437,6 +462,7 @@ "weight": "22 g", "volume": "250 ml", "price": 500, + "price_postapoc": 50, "charges": 2, "material": "cotton", "symbol": "*", @@ -454,6 +480,7 @@ "weight": "1 g", "volume": "250 ml", "price": 72000, + "price_postapoc": 5000, "charges": 4, "stack_size": 100, "material": "powder", @@ -465,7 +492,7 @@ "fun": 50, "addiction_potential": 80, "addiction_type": "crack", - "flags": [ "NO_INGEST" ], + "flags": [ "NO_INGEST", "IRREPLACEABLE_CONSUMABLE" ], "use_action": { "type": "consume_drug", "activation_message": "You smoke your crack rocks. Mother would be proud.", @@ -485,13 +512,14 @@ "weight": "48 g", "volume": "250 ml", "price": 800, + "price_postapoc": 1000, "charges": 5, "symbol": "~", "color": "yellow", "phase": "liquid", "container": "bottle_plastic_small", "use_action": "FLUMED", - "flags": [ "NPC_SAFE" ] + "flags": [ "NPC_SAFE", "IRREPLACEABLE_CONSUMABLE" ] }, { "id": "disinfectant", @@ -502,18 +530,20 @@ "weight": "27 g", "volume": "250 ml", "price": 1500, + "price_postapoc": 500, "charges": 10, "symbol": "~", "color": "light_cyan", "phase": "liquid", "container": "bottle_plastic_small", - "flags": [ "NO_INGEST" ], + "flags": [ "NO_INGEST", "IRREPLACEABLE_CONSUMABLE" ], "use_action": { "type": "heal", "disinfectant_power": 4, "bite": 0.95, "move_cost": 100 } }, { "id": "disinfectant_makeshift", "type": "COMESTIBLE", "name": "makeshift antiseptic", + "price_postapoc": 250, "copy-from": "disinfectant", "description": "Makeshift antiseptic made from ethanol. Can be used to disinfect a wound.", "flags": [ "NO_INGEST" ], @@ -528,6 +558,7 @@ "weight": "1 g", "volume": "250 ml", "price": 15000, + "price_postapoc": 20000, "charges": 10, "stack_size": 100, "symbol": "!", @@ -535,6 +566,7 @@ "stim": -8, "healthy": -1, "fun": 8, + "flags": [ "IRREPLACEABLE_CONSUMABLE" ], "addiction_potential": 20, "addiction_type": "diazepam", "use_action": "ANTICONVULSANT" @@ -548,6 +580,7 @@ "weight": "1 g", "volume": "250 ml", "price": 3000, + "price_postapoc": 500, "charges": 40, "stack_size": 40, "symbol": "!", @@ -556,7 +589,7 @@ "fun": 8, "addiction_potential": 50, "addiction_type": "nicotine", - "flags": [ "NO_INGEST" ], + "flags": [ "NO_INGEST", "IRREPLACEABLE_CONSUMABLE" ], "use_action": "ECIG" }, { @@ -568,6 +601,7 @@ "volume": "10ml", "weight": "3 g", "price": 300, + "price_postapoc": 300, "charges": 10, "symbol": "!", "color": "light_blue", @@ -583,11 +617,12 @@ "weight": "12 g", "volume": "10ml", "price": 5000, + "price_postapoc": 1500, "material": "plastic", "symbol": "!", "color": "magenta", "use_action": "FLU_VACCINE", - "flags": [ "NO_INGEST", "NPC_SAFE" ] + "flags": [ "NO_INGEST", "NPC_SAFE", "IRREPLACEABLE_CONSUMABLE" ] }, { "id": "gum", @@ -599,6 +634,7 @@ "weight": "3 g", "volume": "250 ml", "price": 100, + "price_postapoc": 100, "charges": 10, "stack_size": 100, "symbol": "*", @@ -618,6 +654,7 @@ "volume": "250 ml", "price": 90, "//": "Tougher to market a hand rolled, could be anything in there.", + "price_postapoc": 1000, "stack_size": 60, "symbol": "!", "color": "dark_gray", @@ -638,6 +675,7 @@ "weight": "1 g", "volume": "250 ml", "price": 14000, + "price_postapoc": 20000, "charges": 4, "stack_size": 100, "material": "powder", @@ -649,7 +687,7 @@ "fun": 50, "addiction_potential": 75, "addiction_type": "opiate", - "flags": [ "NO_INGEST" ], + "flags": [ "NO_INGEST", "IRREPLACEABLE_CONSUMABLE" ], "use_action": { "type": "consume_drug", "activation_message": "You shoot up.", @@ -670,6 +708,7 @@ "weight": "1 g", "volume": "250 ml", "price": 1000, + "price_postapoc": 20000, "charges": 10, "stack_size": 200, "symbol": "!", @@ -689,6 +728,7 @@ "weight": "1 g", "volume": "250 ml", "price": 500, + "price_postapoc": 5000, "stack_size": 100, "symbol": "!", "color": "green", @@ -709,13 +749,14 @@ "weight": "1 g", "volume": "250 ml", "price": 10000, + "price_postapoc": 2500, "charges": 5, "stack_size": 100, "symbol": "!", "color": "pink", "stim": 20, "fun": 25, - "flags": [ "NO_INGEST" ], + "flags": [ "NO_INGEST", "IRREPLACEABLE_CONSUMABLE" ], "use_action": { "type": "consume_drug", "activation_message": "You eat the pink tablet.", @@ -730,6 +771,7 @@ "description": "This is decent sized piece of cotton, sterilized and sealed. It's designed for medical purposes.", "weight": "90 g", "price": 350, + "price_postapoc": 200, "material": "cotton", "symbol": ",", "color": "white", @@ -745,6 +787,7 @@ "weight": "1 g", "volume": "250 ml", "price": 15000, + "price_postapoc": 5000, "charges": 6, "stack_size": 100, "material": "powder", @@ -769,6 +812,7 @@ "weight": "1 g", "volume": "250 ml", "price": 4000, + "price_postapoc": 25000, "charges": 4, "stack_size": 100, "material": "powder", @@ -779,7 +823,7 @@ "fun": 25, "addiction_potential": 25, "addiction_type": "opiate", - "flags": [ "NO_INGEST" ], + "flags": [ "NO_INGEST", "IRREPLACEABLE_CONSUMABLE" ], "use_action": { "type": "consume_drug", "activation_message": "You shoot up.", @@ -796,6 +840,7 @@ "weight": "40 g", "volume": "250 ml", "price": 0, + "price_postapoc": 50, "material": "oil", "symbol": "~", "color": "yellow", @@ -815,6 +860,7 @@ "weight": "3 g", "volume": "250 ml", "price": 1000, + "price_postapoc": 2500, "charges": 10, "stack_size": 100, "symbol": "*", @@ -834,12 +880,14 @@ "weight": "48 g", "volume": "250 ml", "price": 800, + "price_postapoc": 750, "charges": 5, "symbol": "~", "color": "blue", "phase": "liquid", "container": "bottle_plastic_small", "stim": -7, + "flags": [ "IRREPLACEABLE_CONSUMABLE" ], "addiction_potential": 20, "addiction_type": "sleeping pill", "use_action": "FLUSLEEP" @@ -853,6 +901,7 @@ "weight": "1 g", "volume": "250 ml", "price": 55000, + "price_postapoc": 40000, "//": "Fairly controlled substance as they go.", "charges": 10, "stack_size": 200, @@ -861,6 +910,7 @@ "healthy": -1, "stim": -4, "fun": 18, + "flags": [ "IRREPLACEABLE_CONSUMABLE" ], "addiction_potential": 16, "addiction_type": "opiate", "use_action": { @@ -878,6 +928,7 @@ "weight": "1 g", "volume": "250 ml", "price": 3000, + "price_postapoc": 10000, "charges": 10, "stack_size": 200, "material": "powder", @@ -885,6 +936,7 @@ "color": "light_red", "stim": -8, "fun": 5, + "flags": [ "IRREPLACEABLE_CONSUMABLE" ], "addiction_potential": 40, "addiction_type": "sleeping pill", "use_action": "SLEEP" @@ -898,6 +950,7 @@ "weight": "1 g", "volume": "250 ml", "price": 3000, + "price_postapoc": 15000, "charges": 10, "stack_size": 100, "material": "powder", @@ -921,6 +974,7 @@ "weight": "1 g", "volume": "250 ml", "price": 2000, + "price_postapoc": 2500, "charges": 10, "stack_size": 100, "material": "powder", @@ -939,6 +993,7 @@ "weight": "48 g", "volume": "250 ml", "price": 2500, + "price_postapoc": 250, "charges": 5, "symbol": "~", "color": "magenta", @@ -959,12 +1014,14 @@ "weight": "1 g", "volume": "250 ml", "price": 9000, + "price_postapoc": 10000, "//": "Don't have a cite for this one.", "charges": 15, "stack_size": 200, "symbol": "!", "color": "light_green", "stim": -5, + "flags": [ "IRREPLACEABLE_CONSUMABLE" ], "addiction_potential": 5, "addiction_type": "amphetamine", "use_action": "PROZAC" @@ -978,10 +1035,11 @@ "weight": "1 g", "volume": "250 ml", "price": 3000, + "price_postapoc": 20000, "charges": 10, "stack_size": 200, "material": "powder", - "flags": [ "NPC_SAFE" ], + "flags": [ "NPC_SAFE", "IRREPLACEABLE_CONSUMABLE" ], "symbol": "!", "color": "blue", "use_action": { @@ -999,13 +1057,14 @@ "weight": "5 g", "volume": "250 ml", "price": 550, + "price_postapoc": 3000, "charges": 6, "stack_size": 60, "material": "powder", "symbol": "!", "color": "light_gray", "container": "bag_plastic", - "flags": [ "NO_INGEST" ], + "flags": [ "NO_INGEST", "IRREPLACEABLE_CONSUMABLE" ], "use_action": { "type": "heal", "bleed": 0.9, "move_cost": 100 } }, { @@ -1017,6 +1076,7 @@ "weight": "51 g", "volume": "250 ml", "price": 500, + "price_postapoc": 125, "charges": 5, "symbol": "~", "color": "light_cyan", @@ -1034,11 +1094,13 @@ "weight": "1 g", "volume": "250 ml", "price": 5000, + "price_postapoc": 10000, "charges": 10, "stack_size": 200, "symbol": "!", "color": "light_red", "stim": -30, + "flags": [ "IRREPLACEABLE_CONSUMABLE" ], "use_action": "THORAZINE" }, { @@ -1050,6 +1112,7 @@ "weight": "40 g", "volume": "250 ml", "price": 0, + "price_postapoc": 50, "material": "oil", "symbol": "~", "color": "yellow", @@ -1067,6 +1130,7 @@ "weight": "1 g", "volume": "250 ml", "price": 1100, + "price_postapoc": 1500, "charges": 20, "stack_size": 60, "symbol": "!", @@ -1098,11 +1162,13 @@ "weight": "1 g", "volume": "250 ml", "price": 24500, + "price_postapoc": 20000, "charges": 10, "stack_size": 200, "symbol": "!", "color": "yellow", "fun": 6, + "flags": [ "IRREPLACEABLE_CONSUMABLE" ], "addiction_potential": 6, "addiction_type": "opiate", "use_action": { @@ -1120,11 +1186,12 @@ "weight": "12 g", "volume": "10ml", "price": 5000, + "price_postapoc": 2000, "material": "plastic", "symbol": "!", "color": "magenta", "use_action": "VACCINE", - "flags": [ "NO_INGEST", "NPC_SAFE", "TRADER_AVOID" ] + "flags": [ "NO_INGEST", "NPC_SAFE", "TRADER_AVOID", "IRREPLACEABLE_CONSUMABLE" ] }, { "id": "vitamins", @@ -1135,11 +1202,12 @@ "weight": "1 g", "volume": "100 ml", "price": 500, - "price_postapoc": 5000, + "price_postapoc": 2000, "charges": 20, "stack_size": 20, "symbol": "!", "color": "magenta", + "flags": [ "IRREPLACEABLE_CONSUMABLE" ], "use_action": { "type": "consume_drug", "activation_message": "You take the %s.", @@ -1155,9 +1223,10 @@ "weight": "1 g", "volume": "100 ml", "price": 400, - "price_postapoc": 4000, + "price_postapoc": 1000, "charges": 20, "stack_size": 20, + "flags": [ "IRREPLACEABLE_CONSUMABLE" ], "symbol": "!", "color": "magenta", "use_action": { "type": "consume_drug", "activation_message": "You take the %s.", "vitamins": [ [ "calcium", 75 ] ] } @@ -1172,7 +1241,7 @@ "volume": "500 ml", "price": 10, "fun": -8, - "price_postapoc": 1000, + "price_postapoc": 500, "charges": 40, "healthy": -2, "stack_size": 40, @@ -1191,7 +1260,7 @@ "volume": "500 ml", "price": 300, "fun": -2, - "price_postapoc": 3800, + "price_postapoc": 750, "charges": 42, "healthy": -2, "stack_size": 42, @@ -1206,7 +1275,9 @@ "type": "COMESTIBLE", "name": "gummy vitamin", "description": "Essential dietary nutrients conveniently packaged in a fruit-flavored chewy candy form. An option of last resort when a balanced diet is not possible. Excess use can cause hypervitaminosis.", + "price_postapoc": 1000, "fun": 4, + "flags": [ "IRREPLACEABLE_CONSUMABLE" ], "charges": 10, "stack_size": 10 }, @@ -1219,12 +1290,12 @@ "weight": "40 g", "volume": "250 ml", "price": 150, - "price_postapoc": 1500, + "price_postapoc": 500, "charges": 2, "stack_size": 10, "symbol": "!", "color": "magenta", - "flags": [ "NO_INGEST" ], + "flags": [ "NO_INGEST", "IRREPLACEABLE_CONSUMABLE" ], "use_action": { "type": "consume_drug", "activation_message": "You inject some vitamin B.", @@ -1241,12 +1312,12 @@ "weight": "40 g", "volume": "250 ml", "price": 2000, - "price_postapoc": 2500, + "price_postapoc": 750, "charges": 2, "stack_size": 10, "symbol": "!", "color": "magenta", - "flags": [ "NO_INGEST" ], + "flags": [ "NO_INGEST", "IRREPLACEABLE_CONSUMABLE" ], "use_action": { "type": "consume_drug", "activation_message": "You inject some iron.", @@ -1263,6 +1334,7 @@ "weight": "1 g", "volume": "250 ml", "price": 2500, + "price_postapoc": 2500, "charges": 5, "stack_size": 100, "symbol": "!", @@ -1294,6 +1366,7 @@ "volume": "250 ml", "price": 6000, "//": "Yeah, kinda guessing at these ones, but generic is cheaper.", + "price_postapoc": 5000, "charges": 10, "stack_size": 200, "symbol": "!", @@ -1301,6 +1374,7 @@ "stim": -4, "healthy": -2, "fun": 20, + "flags": [ "IRREPLACEABLE_CONSUMABLE" ], "addiction_potential": 40, "addiction_type": "sleeping pill", "use_action": "XANAX" @@ -1315,6 +1389,7 @@ "//": "Can't copy-from rag, it breaks the stacking for some reason!", "volume": "250 ml", "price": 250, + "price_postapoc": 50, "material": "cotton", "symbol": ",", "color": "white", @@ -1337,6 +1412,7 @@ "//": "Can't copy-from cotton_ball, breaks volume", "volume": "125 ml", "price": 250, + "price_postapoc": 50, "material": "cotton", "symbol": "*", "color": "white", @@ -1360,13 +1436,14 @@ "volume": "250 ml", "price": 1500, "charges": 5, + "price_postapoc": 20000, "stack_size": 200, "material": "plastic", "symbol": "!", "color": "white", "healthy": -2, "use_action": "WEAK_ANTIBIOTIC", - "flags": [ "NPC_SAFE" ] + "flags": [ "NPC_SAFE", "IRREPLACEABLE_CONSUMABLE" ] }, { "id": "pepto", @@ -1377,6 +1454,7 @@ "weight": "1 g", "volume": "250 ml", "price": 1000, + "price_postapoc": 250, "container": "bottle_plastic_small", "charges": 10, "symbol": "%", @@ -1387,7 +1465,7 @@ "activation_message": "You take some heartburn medicine.", "effects": [ { "id": "tummy_tablet", "duration": 6400 } ] }, - "flags": [ "NPC_SAFE" ] + "flags": [ "NPC_SAFE", "IRREPLACEABLE_CONSUMABLE" ] }, { "id": "panacea", @@ -1398,13 +1476,14 @@ "weight": "15 g", "volume": "5 ml", "price": 1000000, + "price_postapoc": 8000, "stack_size": 5, "material": "plastic", "symbol": "!", "color": "red", "healthy": 25, "use_action": "PANACEA", - "flags": [ "NPC_SAFE" ] + "flags": [ "NPC_SAFE", "IRREPLACEABLE_CONSUMABLE" ] }, { "id": "cattail_jelly", @@ -1417,7 +1496,7 @@ "volume": "250 ml", "charges": 7, "price": 50, - "price_postapoc": 500, + "price_postapoc": 50, "material": "oil", "phase": "liquid", "symbol": "~", @@ -1440,12 +1519,13 @@ "weight": "1 g", "volume": "250 ml", "price": 15000, + "price_postapoc": 60000, "charges": 5, "stack_size": 200, "symbol": "!", "color": "white", "healthy": -10, - "flags": "NPC_SAFE", + "flags": [ "NPC_SAFE", "IRREPLACEABLE_CONSUMABLE" ], "use_action": { "type": "STRONG_ANTIBIOTIC" } } ] diff --git a/data/json/items/comestibles/mre.json b/data/json/items/comestibles/mre.json index b6279c39d01f6..6501b015f482c 100644 --- a/data/json/items/comestibles/mre.json +++ b/data/json/items/comestibles/mre.json @@ -8,6 +8,7 @@ "category": "food", "description": "A generic MRE box, you shouldn't see this.", "price": 1500, + "price_postapoc": 1500, "weight": "725 g", "volume": "750 ml", "material": [ "plastic" ], @@ -23,6 +24,7 @@ "category": "food", "description": "A generic small MRE box, you shouldn't see this", "price": 500, + "price_postapoc": 100, "weight": "300 g", "volume": "250 ml", "material": [ "plastic" ], @@ -42,6 +44,7 @@ "calories": 320, "description": "A generic MRE entree, you shouldn't see this.", "price": 1250, + "price_postapoc": 300, "volume": "250 ml", "charges": 4, "flags": [ "EATEN_HOT" ], diff --git a/data/json/items/comestibles/mushroom.json b/data/json/items/comestibles/mushroom.json index 5e7927b90611f..5874be55cff73 100644 --- a/data/json/items/comestibles/mushroom.json +++ b/data/json/items/comestibles/mushroom.json @@ -7,6 +7,7 @@ "spoils_in": "1 day", "description": "A tasty cooked wild mushroom.", "price": 150, + "price_postapoc": 50, "fun": 1, "vitamins": [ [ "vitC", 4 ], [ "iron", 7 ] ], "flags": [ "FREEZERBURN" ] @@ -25,6 +26,7 @@ "calories": 24, "description": "Prized by chefs and woodsmen alike, morel mushrooms are delicious but must be cooked before they are safe to eat.", "price": 2000, + "price_postapoc": 50, "material": "mushroom", "volume": "250 ml", "fun": 1, @@ -41,6 +43,7 @@ "spoils_in": "1 day", "description": "A tasty cooked morel mushroom.", "price": 1500, + "price_postapoc": 50, "fun": 4, "flags": [ "FREEZERBURN" ], "vitamins": [ [ "calcium", 2 ], [ "iron", 52 ] ] @@ -54,6 +57,7 @@ "spoils_in": "1 day 12 hours", "description": "A delicious serving of fried morsels of morel mushroom.", "price": 1500, + "price_postapoc": 50, "charges": 2, "fun": 12, "flags": [ "EATEN_HOT", "FREEZERBURN" ] @@ -72,6 +76,7 @@ "calories": 22, "description": "Dried mushrooms are a tasty and healthy addition to many meals.", "price": 180, + "price_postapoc": 100, "material": "mushroom", "primary_material": "dried_vegetable", "volume": "25 ml", @@ -91,6 +96,7 @@ "calories": 15, "description": "Mushrooms are tasty, but be careful. Some can poison you, while others are hallucinogenic.", "price": 140, + "price_postapoc": 50, "material": "mushroom", "volume": "250 ml", "fun": -3, diff --git a/data/json/items/comestibles/mutagen.json b/data/json/items/comestibles/mutagen.json index 53e9bddd3bc8f..d4ea6f7afa3ca 100644 --- a/data/json/items/comestibles/mutagen.json +++ b/data/json/items/comestibles/mutagen.json @@ -5,6 +5,7 @@ "name": { "str": "abstract mutagen flavor" }, "description": "A rare substance of uncertain origins. Causes you to mutate.", "price": 100000, + "price_postapoc": 50, "//": "Not commercially traded, in case there was any question.", "comestible_type": "DRINK", "category": "mutagen", @@ -30,6 +31,7 @@ "name": { "str": "abstract iv mutagen flavor" }, "description": "A super-concentrated mutagen. You need a syringe to inject it… if you really want to?", "price": 200000, + "price_postapoc": 100, "weight": "10 g", "volume": "10ml", "symbol": "!", @@ -435,6 +437,7 @@ "name": "purifier", "description": "A rare stem-cell treatment that causes mutations and other genetic defects to fade away.", "price": 600000, + "price_postapoc": 500, "//": "*May* have been commercially traded, what with stem-cell treatments and all.", "color": "pink", "healthy": 5, @@ -448,6 +451,7 @@ "name": "purifier serum", "description": "A super-concentrated stem cell treatment. You need a syringe to inject it.", "price": 900000, + "price_postapoc": 1000, "//": "*May* have been commercially traded, but not in this preparation.", "color": "magenta", "addiction_potential": 8, @@ -463,6 +467,7 @@ "weight": "12 g", "volume": "10ml", "price": 1200000, + "price_postapoc": 3000, "material": "plastic", "symbol": "!", "color": "magenta", @@ -487,6 +492,7 @@ "calories": 156, "description": "A deformed human fetus. Eating this would be the most vile thing you can think of, and just might cause you to mutate.", "price": 0, + "price_postapoc": 0, "material": "hflesh", "volume": "250 ml", "fun": -60 @@ -507,6 +513,7 @@ "calories": 278, "description": "A misshapen human arm. Eating this would be incredibly disgusting and probably cause you to mutate.", "price": 0, + "price_postapoc": 0, "material": "hflesh", "volume": "2 L", "fun": -20 @@ -527,6 +534,7 @@ "calories": 399, "description": "A malformed human leg. This would be gross to eat, and probably cause mutations.", "price": 0, + "price_postapoc": 0, "material": "hflesh", "volume": "5 L", "fun": -20 @@ -549,7 +557,8 @@ "addiction_potential": 5, "calories": 87, "description": "A frothing slurry of alcohol-soaked zombie flesh and rotten blood, it smells almost as bad as it looks. Has weak mutagenic properties.", - "price": 6500, + "price": 0, + "price_postapoc": 0, "material": [ "alcohol", "flesh" ], "volume": "250 ml", "phase": "liquid", @@ -574,7 +583,8 @@ "addiction_potential": 5, "calories": 26, "description": "A thirsty mutant's drink of choice. It tastes horrible but it's probably a lot safer to drink than before.", - "price": 1000, + "price": 0, + "price_postapoc": 0, "material": [ "alcohol", "junk" ], "volume": "500 ml", "phase": "liquid", diff --git a/data/json/items/comestibles/nuts.json b/data/json/items/comestibles/nuts.json index 64136db5aa167..a2c22f17b3848 100644 --- a/data/json/items/comestibles/nuts.json +++ b/data/json/items/comestibles/nuts.json @@ -14,6 +14,7 @@ "calories": 202, "description": "A handful of tasty crunchy nuts from a pinecone.", "price": 136, + "price_postapoc": 600, "material": "nut", "volume": "250 ml", "flags": [ "EDIBLE_FROZEN", "NUTRIENT_OVERRIDE" ], @@ -34,6 +35,7 @@ "calories": 22, "description": "Junipers, for making gin and earthy flavors. Spicy, tastes similar to rosemary.", "price": 400, + "price_postapoc": 25, "material": "fruit", "volume": "250 ml", "fun": -2, @@ -54,6 +56,7 @@ "calories": 168, "description": "A handful of nuts from a pistachio tree, their shells have been removed.", "price": 100, + "price_postapoc": 600, "material": "nut", "volume": "250 ml", "flags": [ "EDIBLE_FROZEN", "NUTRIENT_OVERRIDE", "RAW" ], @@ -87,6 +90,7 @@ "calories": 167, "description": "A handful of nuts from an almond tree, their shells have been removed.", "price": 100, + "price_postapoc": 600, "material": "nut", "volume": "250 ml", "flags": [ "EDIBLE_FROZEN", "NUTRIENT_OVERRIDE", "RAW" ], @@ -107,6 +111,7 @@ "calories": 184, "description": "Pulp left over after making almond milk. It's gritty and incredibly bland.", "price": 10, + "price_postapoc": 50, "material": "nut", "volume": "125 ml", "flags": [ "EDIBLE_FROZEN" ], @@ -120,6 +125,7 @@ "healthy": 2, "description": "A handful of roasted nuts from an almond tree.", "price": 150, + "price_postapoc": 600, "flags": [ "EATEN_HOT", "EDIBLE_FROZEN" ], "fun": 3 }, @@ -138,6 +144,7 @@ "calories": 166, "description": "A handful of salty cashews.", "price": 110, + "price_postapoc": 600, "material": "nut", "volume": "250 ml", "flags": [ "EDIBLE_FROZEN", "NUTRIENT_OVERRIDE" ], @@ -160,6 +167,7 @@ "calories": 196, "description": "A handful of pecans which are a sub-species of hickory nuts, their shells have been removed.", "price": 100, + "price_postapoc": 600, "material": "nut", "volume": "250 ml", "flags": [ "EDIBLE_FROZEN", "NUTRIENT_OVERRIDE", "RAW" ], @@ -192,6 +200,7 @@ "calories": 174, "description": "Salty peanuts with their shells removed.", "price": 100, + "price_postapoc": 600, "material": "nut", "volume": "250 ml", "flags": [ "EDIBLE_FROZEN", "NUTRIENT_OVERRIDE", "RAW" ], @@ -213,6 +222,7 @@ "calories": 170, "description": "A handful of hard pointy nuts from a beech tree.", "price": 0, + "price_postapoc": 400, "material": "nut", "volume": "250 ml", "flags": [ "EDIBLE_FROZEN", "NUTRIENT_OVERRIDE", "RAW" ], @@ -233,6 +243,7 @@ "calories": 192, "description": "A handful of raw hard nuts from a walnut tree, their shells have been removed.", "price": 0, + "price_postapoc": 600, "flags": [ "EDIBLE_FROZEN", "NUTRIENT_OVERRIDE", "RAW" ], "material": "nut", "volume": "250 ml", @@ -265,6 +276,7 @@ "calories": 72, "description": "A handful of raw hard nuts from a chestnut tree, their shells have been removed.", "price": 0, + "price_postapoc": 100, "flags": [ "EDIBLE_FROZEN", "NUTRIENT_OVERRIDE", "RAW" ], "material": "nut", "charges": 4, @@ -297,6 +309,7 @@ "calories": 193, "description": "A handful of raw hard nuts from a hazelnut tree, their shells have been removed.", "price": 0, + "price_postapoc": 500, "flags": [ "EDIBLE_FROZEN", "NUTRIENT_OVERRIDE", "RAW" ], "material": "nut", "volume": "250 ml", @@ -318,6 +331,7 @@ "quench": -3, "description": "Roasted edamame, a heart healthy snack.", "price": 10, + "price_postapoc": 600, "material": "nut", "volume": "250 ml", "flags": [ "EDIBLE_FROZEN", "NUTRIENT_OVERRIDE", "EATEN_HOT" ], @@ -339,6 +353,7 @@ "quench": -3, "description": "Roasted soybeans, often called soy nuts.", "price": 10, + "price_postapoc": 500, "material": "nut", "volume": "250 ml", "flags": [ "EDIBLE_FROZEN", "NUTRIENT_OVERRIDE", "EATEN_HOT" ], @@ -371,6 +386,7 @@ "calories": 194, "description": "A handful of raw hard nuts from a hickory tree, their shells have been removed.", "price": 0, + "price_postapoc": 200, "flags": [ "EDIBLE_FROZEN", "NUTRIENT_OVERRIDE", "RAW" ], "material": "nut", "volume": "250 ml", @@ -386,6 +402,7 @@ "healthy": 1, "description": "A handful of roasted nuts from a hickory tree.", "price": 90, + "price_postapoc": 500, "flags": [ "EATEN_HOT", "EDIBLE_FROZEN" ], "fun": 1 }, @@ -403,6 +420,7 @@ "calories": 130, "description": "Delicious hickory nut ambrosia. A drink worthy of the gods.", "price": 100, + "price_postapoc": 400, "material": [ "nut", "milk" ], "volume": "250 ml", "phase": "liquid", @@ -426,6 +444,7 @@ "calories": 114, "description": "A handful of acorns, still in their shells. Squirrels like them, but they're not very good for you to eat in this state.", "price": 0, + "price_postapoc": 200, "material": "nut", "volume": "250 ml", "flags": [ "EDIBLE_FROZEN", "NUTRIENT_OVERRIDE", "RAW" ], @@ -441,6 +460,7 @@ "healthy": 1, "description": "A handful roasted nuts from an oak tree.", "price": 90, + "price_postapoc": 200, "flags": [ "EATEN_HOT", "EDIBLE_FROZEN" ], "fun": 1 }, @@ -457,6 +477,7 @@ "calories": 110, "description": "A serving of acorns that have been hulled, chopped, and boiled in water before being thoroughly toasted until dry. Filling and nutritious.", "price": 90, + "price_postapoc": 300, "material": "nut", "vitamins": [ [ "calcium", 4 ], [ "iron", 4 ] ], "volume": "250 ml" diff --git a/data/json/items/comestibles/offal_dishes.json b/data/json/items/comestibles/offal_dishes.json index 09f79364b1740..fc90b82c37632 100644 --- a/data/json/items/comestibles/offal_dishes.json +++ b/data/json/items/comestibles/offal_dishes.json @@ -7,6 +7,7 @@ "symbol": "%", "looks_like": "meat_cooked", "description": "Thought it's not technically foie gras, you don't have to think about that.", + "price_postapoc": 150, "material": [ "flesh", "fruit" ], "color": "brown", "weight": "75 g", @@ -28,6 +29,7 @@ "symbol": "%", "looks_like": "meat_cooked", "description": "A classic way to serve liver.", + "price_postapoc": 150, "material": [ "flesh", "veggy" ], "color": "brown", "weight": "206 g", @@ -47,6 +49,7 @@ "symbol": "%", "looks_like": "meat_cooked", "description": "Nothing tastier than something that's deep-fried!", + "price_postapoc": 150, "material": [ "flesh", "wheat", "milk" ], "primary_material": "flesh", "color": "brown", @@ -74,6 +77,7 @@ "calories": 358, "description": "Also known as 'Umble' pie, made with chopped organ meats. Not half bad, and really good for you!", "price": 1350, + "price_postapoc": 450, "material": [ "wheat", "flesh" ], "primary_material": "processed_food", "volume": "750ml", @@ -93,6 +97,7 @@ "healthy": 1, "fun": 3, "description": "Stomach lining, cut up and stewed for an hour in broth. Better than it sounds.", + "price_postapoc": 50, "material": [ "flesh" ], "primary_material": "flesh", "color": "brown", @@ -113,6 +118,7 @@ "healthy": -2, "fun": 6, "description": "Nothing tastier than something that's deep-fried!", + "price_postapoc": 150, "material": [ "flesh", "wheat" ], "primary_material": "flesh", "color": "brown", @@ -131,6 +137,7 @@ "looks_like": "peanutbutter", "quench": -2, "description": "A traditional Danish pate. Probably better if you spread it on some bread.", + "price_postapoc": 150, "material": [ "flesh", "wheat", "milk", "veggy" ], "primary_material": "processed_food", "color": "magenta", @@ -151,6 +158,7 @@ "quench": -2, "fun": 3, "description": "I don't know what you were expecting. It's deep-fried.", + "price_postapoc": 400, "material": [ "flesh", "wheat" ], "primary_material": "flesh", "color": "brown", @@ -172,6 +180,7 @@ "quench": 1, "fun": 5, "description": "A delicious way to prepare kidneys.", + "price_postapoc": 450, "material": [ "flesh", "wheat", "veggy" ], "primary_material": "flesh", "color": "yellow", @@ -209,6 +218,7 @@ "quench": 3, "fun": 8, "description": "A delicious way to prepare lungs.", + "price_postapoc": 250, "material": [ "flesh", "wheat", "veggy" ], "primary_material": "flesh", "color": "yellow", @@ -229,6 +239,7 @@ "quench": 2, "fun": 7, "description": "A German lung dish.", + "price_postapoc": 1000, "material": [ "flesh", "wheat", "veggy" ], "primary_material": "flesh", "color": "yellow", @@ -249,6 +260,7 @@ "quench": 2, "fun": 3, "description": "Brains and eggs, why didn't you ever think to put these together?", + "price_postapoc": 1000, "material": [ "flesh", "wheat", "veggy" ], "primary_material": "flesh", "color": "yellow", diff --git a/data/json/items/comestibles/other.json b/data/json/items/comestibles/other.json index 43b2959b9882c..ea6e5f8865611 100644 --- a/data/json/items/comestibles/other.json +++ b/data/json/items/comestibles/other.json @@ -27,6 +27,7 @@ "calories": 174, "description": "A little hunk of glop that fell off a blob monster. It doesn't seem hostile, but it does wiggle occasionally.", "price": 0, + "price_postapoc": 0, "volume": "250 ml", "fun": -10 }, @@ -43,6 +44,7 @@ "calories": 436, "description": "A large chunk of wax filled with honey. Very tasty.", "price": 3500, + "price_postapoc": 300, "material": "honey", "volume": "250 ml", "fun": 9 @@ -60,6 +62,7 @@ "calories": 35, "description": "A large chunk of beeswax. Not very tasty or nourishing, but okay in an emergency.", "price": 1500, + "price_postapoc": 10, "volume": "250 ml", "fun": -5 }, @@ -78,6 +81,7 @@ "description": "A translucent hexagonal chunk of wax, filled with dense, milky jelly. Delicious, and rich with the most beneficial substances the hive can produce, it is useful for curing all sorts of afflictions.", "price": 20000, "//": "Didn't precisely exist pre-Cataclysm, so tough to price.", + "price_postapoc": 4000, "volume": "250 ml", "flags": [ "EDIBLE_FROZEN", "NUTRIENT_OVERRIDE" ], "fun": 7 @@ -98,6 +102,7 @@ "calories": 347, "description": "This looks like a blueberry the size of your fist, but pinkish in color. It has a strong but delicious aroma, but is clearly either mutated or of alien origin.", "price": 0, + "price_postapoc": 0, "material": "fruit", "volume": "250 ml", "stack_size": 4, @@ -120,6 +125,7 @@ "calories": 174, "description": "This looks like a handful of lemon-colored liquid which has taken a set, much like pre-Cataclysm Jello. It has a strong but delicious aroma, but is clearly either mutated or of alien origin.", "price": 0, + "price_postapoc": 0, "material": "fruit", "volume": "100 ml", "stack_size": 10, @@ -139,6 +145,7 @@ "calories": 694, "description": "Humans might call this a Gray Delicious apple: large, gray, and smells even better than the Marloss. If they didn't reject it for its alien origins. But we know better.", "price": 0, + "price_postapoc": 0, "material": "fruit", "volume": "250 ml", "stack_size": 4, @@ -158,6 +165,7 @@ "calories": 9, "description": "A powder-like mix of cultured yeast, good for baking and brewing alike.", "price": 150, + "price_postapoc": 50, "material": "powder", "volume": "250 ml", "flags": [ "EDIBLE_FROZEN" ], @@ -174,6 +182,7 @@ "symbol": "%", "description": "This bone meal can be used to craft fertilizer and some other things.", "price": 25, + "price_postapoc": 10, "material": "powder", "volume": "250 ml", "flags": [ "EDIBLE_FROZEN" ], @@ -192,6 +201,7 @@ "description": "This is a grayish bone meal made from rotten bones.", "calories": 4, "price": 0, + "price_postapoc": 0, "material": "powder", "volume": "250 ml", "flags": [ "EDIBLE_FROZEN" ], @@ -210,6 +220,7 @@ "calories": 17, "description": "This chitin powder can be used to craft fertilizer and some other things.", "price": 25, + "price_postapoc": 10, "material": "powder", "volume": "250 ml", "flags": [ "EDIBLE_FROZEN", "NUTRIENT_OVERRIDE" ], @@ -227,6 +238,7 @@ "symbol": "`", "description": "A piece of paper. Can be used for fires.", "price": 0, + "price_postapoc": 0, "material": "paper", "volume": "250 ml", "freezing_point": -490, @@ -245,6 +257,7 @@ "symbol": "`", "description": "A piece of cardboard.", "price": 0, + "price_postapoc": 0, "material": "cardboard", "volume": "250 ml", "freezing_point": -490, @@ -265,6 +278,7 @@ "calories": 203, "description": "Canned beans. A staple among canned goods, these are reputedly good for one's coronary health.", "price": 150, + "price_postapoc": 150, "material": "bean", "volume": "500 ml", "charges": 2, @@ -286,6 +300,7 @@ "calories": 203, "description": "Dehydrated great northern beans. Tasty and nutritious when cooked, virtually inedible when dry.", "price": 300, + "price_postapoc": 150, "material": "bean", "volume": "250 ml", "cooks_like": "beans_cooked", @@ -308,6 +323,7 @@ "calories": 203, "description": "A hearty serving of cooked great northern beans.", "price": 100, + "price_postapoc": 100, "material": "bean", "volume": "250 ml", "flags": [ "EATEN_HOT", "NUTRIENT_OVERRIDE" ], @@ -327,6 +343,7 @@ "calories": 130, "description": "Tofu, a soy protein crucial to East Asian cuisine. It absorbs flavors very well and can be used as a meat alternative in many dishes.", "price": 90, + "price_postapoc": 50, "fun": -4, "material": "veggy", "volume": "85 ml", @@ -348,6 +365,7 @@ "calories": 150, "description": "Tofu, a soy protein crucial to East Asian cuisine. It absorbs flavors very well and can be used as a meat alternative in many dishes.", "price": 90, + "price_postapoc": 50, "material": "veggy", "volume": "85 ml", "flags": [ "EATEN_HOT", "NUTRIENT_OVERRIDE" ], @@ -366,6 +384,7 @@ "calories": 130, "description": "Dehydrated tofu, sealed and still extra firm to last a long time.", "price": 90, + "price_postapoc": 75, "material": "veggy", "volume": "85 ml", "vitamins": [ [ "calcium", 16 ], [ "iron", 4 ] ] @@ -383,6 +402,7 @@ "calories": 56, "description": "Light brown beans, they have many uses, mildly toxic and not recommended, but you could eat them raw.", "price": 90, + "price_postapoc": 50, "fun": -5, "vitamins": [ [ "iron", 25 ], [ "vitC", 1 ], [ "calcium", 3 ] ], "flags": [ "SMOKABLE", "NUTRIENT_OVERRIDE", "RAW" ], @@ -401,6 +421,7 @@ "calories": 56, "description": "Light green raw edamame still in its pod, you should boil or freeze these, or you could eat them while they are still toxic.", "price": 150, + "price_postapoc": 50, "fun": 1, "vitamins": [ [ "iron", 26 ], [ "vitC", 16 ], [ "calcium", 6 ] ], "flags": [ "SMOKABLE", "NUTRIENT_OVERRIDE", "RAW" ], @@ -420,6 +441,7 @@ "calories": 230, "description": "A humble but nutrient-rich legume. Should be cooked prior to consumption.", "price": 20, + "price_postapoc": 150, "material": "veggy", "volume": "250 ml", "flags": [ "EDIBLE_FROZEN" ], @@ -438,11 +460,10 @@ "quench": 1, "description": "Some delicious cooked lentils. Humble but nutrient-rich.", "price": 0, + "price_postapoc": 100, "volume": "250 ml", "fun": 1, - "flags": [ "EATEN_HOT" ], - "rot_spawn": "GROUP_ROTTING_PLANT", - "rot_spawn_chance": 5 + "flags": [ "EATEN_HOT" ] }, { "type": "COMESTIBLE", @@ -459,9 +480,10 @@ "symbol": "%", "description": "Ground coffee beans. You can boil it into a mediocre stimulant, or something better if you had an atomic coffee pot.", "price": 900, + "price_postapoc": 500, "material": "powder", "volume": "250 ml", - "flags": [ "EDIBLE_FROZEN", "RAW" ], + "flags": [ "EDIBLE_FROZEN", "RAW", "IRREPLACEABLE_CONSUMABLE" ], "calories": 23, "charges": 20, "fun": -5 @@ -485,6 +507,7 @@ "name": { "str": "candied honey", "str_pl": "candied honey" }, "description": "Honey, that stuff the bees make. This variant is \"candied honey\", a variant of very thick consistence. This honey won't spoil and is good for your digestion.", "price": 800, + "price_postapoc": 750, "material": "honey", "weight": "51 g", "volume": "250 ml", @@ -511,6 +534,7 @@ "calories": 41, "description": "Canned tomato. A staple in many pantries, and useful for many recipes.", "price": 350, + "price_postapoc": 100, "material": "tomato", "volume": "250 ml", "stack_size": 2, @@ -533,6 +557,7 @@ "vitamins": [ [ "vitA", 0 ], [ "vitC", 2 ], [ "calcium", 1 ], [ "iron", 8 ], [ "vitB", 54 ] ], "description": "This is a human brain soaked in a solution of highly toxic formaldehyde. Eating this would be a terrible idea.", "price": 80, + "price_postapoc": 0, "material": "hflesh", "flags": [ "TRADER_AVOID" ], "volume": "250 ml", @@ -547,6 +572,7 @@ "weight": "300 g", "volume": "250 ml", "price": 100, + "price_postapoc": 25, "to_hit": -5, "material": "veggy", "symbol": ";", @@ -568,6 +594,7 @@ "weight": "60 g", "volume": "250 ml", "price": 20, + "price_postapoc": 25, "to_hit": -5, "material": "veggy", "symbol": ";", @@ -590,6 +617,7 @@ "container": "can_medium", "volume": "500 ml", "price": 300, + "price_postapoc": 250, "to_hit": -5, "material": "flesh", "symbol": ";", @@ -613,6 +641,7 @@ "container": "can_food", "volume": "250 ml", "price": 300, + "price_postapoc": 400, "to_hit": -5, "material": "flesh", "symbol": ";", @@ -637,6 +666,7 @@ "vitamins": [ ], "description": "Some grass, edible by grazers and ruminants only. Seeing this item is a bug.", "price": 0, + "price_postapoc": 0, "material": "veggy", "flags": [ "TRADER_AVOID" ], "volume": "250 ml" @@ -653,6 +683,7 @@ "vitamins": [ ], "description": "Some underbrush, edible by ruminants only. Seeing this item is a bug.", "price": 0, + "price_postapoc": 0, "material": "veggy", "flags": [ "TRADER_AVOID" ], "volume": "250 ml" @@ -669,6 +700,7 @@ "vitamins": [ ], "description": "Some nectar. Seeing this item is a bug.", "price": 0, + "price_postapoc": 0, "flags": [ "TRADER_AVOID" ], "volume": "250 ml" } diff --git a/data/json/items/comestibles/protein.json b/data/json/items/comestibles/protein.json index 85a64946a0729..92f4ddebd111e 100644 --- a/data/json/items/comestibles/protein.json +++ b/data/json/items/comestibles/protein.json @@ -12,6 +12,7 @@ "weight": "278 g", "volume": "250 ml", "price": 200, + "price_postapoc": 25, "symbol": "~", "color": "light_gray", "spoils_in": "2 days", @@ -43,6 +44,7 @@ "weight": "28 g", "volume": "243 ml", "price": 1100, + "price_postapoc": 100, "charges": 9, "flags": [ "EDIBLE_FROZEN" ], "material": "powder", @@ -62,6 +64,7 @@ "weight": "150 g", "volume": "223 ml", "price": 500, + "price_postapoc": 50, "flags": [ "EDIBLE_FROZEN" ], "healthy": -1, "fun": -5, diff --git a/data/json/items/comestibles/raw_fruit.json b/data/json/items/comestibles/raw_fruit.json index d6cb5b4c420af..d25d565f44fc6 100644 --- a/data/json/items/comestibles/raw_fruit.json +++ b/data/json/items/comestibles/raw_fruit.json @@ -13,6 +13,7 @@ "calories": 95, "description": "An apple a day keeps the doctor away.", "price": 900, + "price_postapoc": 100, "material": "fruit", "volume": "375 ml", "fun": 3, @@ -33,6 +34,7 @@ "calories": 105, "description": "A long, curved yellow fruit in a peel. Some people like using them in desserts. Those people are probably dead.", "price": 120, + "price_postapoc": 100, "material": "fruit", "volume": "500 ml", "fun": 5, @@ -54,6 +56,7 @@ "calories": 69, "description": "Sweet citrus fruit. Also comes in juice form.", "price": 180, + "price_postapoc": 100, "material": "fruit", "volume": "375 ml", "fun": 3, @@ -75,6 +78,7 @@ "calories": 24, "description": "Very sour citrus. Can be eaten if you really want.", "price": 120, + "price_postapoc": 100, "material": "fruit", "volume": "250 ml", "flags": [ "FREEZERBURN", "SMOKABLE", "RAW" ], @@ -96,6 +100,7 @@ "calories": 89, "description": "They're blue, but that doesn't mean they're sad.", "price": 400, + "price_postapoc": 100, "material": "fruit", "volume": "250 ml", "fun": 2, @@ -117,6 +122,7 @@ "calories": 46, "description": "Tasty, juicy berry. Often found growing wild in fields.", "price": 400, + "price_postapoc": 100, "material": "fruit", "volume": "250 ml", "fun": 5, @@ -138,6 +144,7 @@ "calories": 54, "description": "Sour red berries. Good for your health.", "price": 150, + "price_postapoc": 100, "material": "fruit", "volume": "250 ml", "charges": 3, @@ -159,6 +166,7 @@ "calories": 74, "description": "A sweet red berry.", "price": 400, + "price_postapoc": 100, "material": "fruit", "volume": "250 ml", "fun": 4, @@ -180,6 +188,7 @@ "calories": 56, "description": "Huckleberries, often times confused for blueberries.", "price": 400, + "price_postapoc": 100, "material": "fruit", "volume": "250 ml", "fun": 2, @@ -201,6 +210,7 @@ "calories": 64, "description": "Mulberries, this red variety is unique to east North America and is described to have the strongest flavor of any variety in the world.", "price": 400, + "price_postapoc": 100, "material": "fruit", "volume": "250 ml", "fun": 4, @@ -222,6 +232,7 @@ "calories": 112, "description": "Elderberries, toxic when eaten raw but great when cooked.", "price": 400, + "price_postapoc": 100, "material": "fruit", "volume": "250 ml", "fun": -2, @@ -243,6 +254,7 @@ "calories": 217, "description": "The fruit of a pollinated rose flower.", "price": 400, + "price_postapoc": 100, "material": "fruit", "volume": "250 ml", "fun": 2, @@ -264,6 +276,7 @@ "calories": 25, "description": "Left-over from juicing the fruit. Not very tasty, but contains a lot of healthy fiber.", "price": 25, + "price_postapoc": 25, "material": "fruit", "volume": "50 ml", "flags": [ "SMOKABLE" ], @@ -285,6 +298,7 @@ "calories": 84, "description": "A juicy, bell-shaped pear. Yum!", "price": 160, + "price_postapoc": 100, "material": "fruit", "volume": "250 ml", "fun": 4, @@ -306,6 +320,7 @@ "calories": 104, "description": "A citrus fruit, whose taste ranges from sour to semi-sweet.", "price": 180, + "price_postapoc": 100, "material": "fruit", "volume": "250 ml", "flags": [ "FREEZERBURN", "SMOKABLE" ], @@ -327,6 +342,7 @@ "calories": 92, "description": "A red, sweet fruit that grows in trees.", "price": 110, + "price_postapoc": 100, "material": "fruit", "volume": "250 ml", "fun": 3, @@ -348,6 +364,7 @@ "calories": 30, "description": "A handful of large, purple plums. Healthy and good for your digestion.", "price": 200, + "price_postapoc": 100, "material": "fruit", "volume": "66 ml", "fun": 3, @@ -369,6 +386,7 @@ "calories": 165, "description": "A cluster of juicy grapes.", "price": 75, + "price_postapoc": 100, "material": "fruit", "volume": "250 ml", "fun": 4, @@ -390,6 +408,7 @@ "calories": 87, "description": "A large, spiky pineapple. A bit sour, though.", "price": 450, + "price_postapoc": 500, "material": "fruit", "volume": "1500 ml", "charges": 5, @@ -412,6 +431,7 @@ "calories": 299, "description": "A fruit with a hard and hairy shell.", "price": 100, + "price_postapoc": 100, "material": "fruit", "volume": "2 L", "bashing": 2, @@ -433,6 +453,7 @@ "calories": 63, "description": "This fruit's large pit is surrounded by its tasty flesh.", "price": 140, + "price_postapoc": 100, "material": "fruit", "volume": "250 ml", "fun": 4, @@ -455,6 +476,7 @@ "calories": 48, "description": "A fruit, bigger than your head. It is very juicy!", "price": 400, + "price_postapoc": 600, "material": "fruit", "volume": "5 L", "charges": 20, @@ -479,6 +501,7 @@ "calories": 54, "description": "A large and very sweet fruit.", "price": 39, + "price_postapoc": 100, "material": "fruit", "volume": "1250 ml", "charges": 5, @@ -502,6 +525,7 @@ "calories": 86, "description": "A darker cousin of raspberry.", "price": 400, + "price_postapoc": 100, "material": "fruit", "volume": "250 ml", "fun": 4, @@ -523,6 +547,7 @@ "calories": 105, "description": "A fleshy fruit with large pit.", "price": 180, + "price_postapoc": 100, "material": "fruit", "//": "serving size is 250 ml of edible material, extra volume is the pit.", "volume": "1 L", @@ -546,6 +571,7 @@ "calories": 153, "description": "Under this pomegranate's spongy skin lies hundreds of fleshy seeds.", "price": 190, + "price_postapoc": 200, "material": "fruit", "volume": "500 ml", "charges": 2, @@ -568,6 +594,7 @@ "calories": 104, "description": "A very sweet and soft tropical fruit.", "price": 250, + "price_postapoc": 300, "material": "fruit", "volume": "750 ml", "charges": 3, @@ -590,6 +617,7 @@ "calories": 45, "description": "A large, brown and fuzzy-skinned berry. Its delicious insides are green.", "price": 250, + "price_postapoc": 100, "material": "fruit", "volume": "250 ml", "fun": 3, @@ -612,6 +640,7 @@ "calories": 179, "description": "A smooth-skinned fruit, related to the peach.", "price": 140, + "price_postapoc": 100, "material": "fruit", "volume": "250 ml", "fun": 3, @@ -633,6 +662,7 @@ "calories": 62, "description": "Edible bud of a cholla cactus, with spines removed; the candy of the Mojave indigenous peoples. Tastes similar to asparagus.", "price": 900, + "price_postapoc": 100, "material": "fruit", "volume": "175 ml", "fun": 6, @@ -654,6 +684,7 @@ "calories": 15, "description": "An edible pad of a cactus.", "price": 50, + "price_postapoc": 25, "material": "fruit", "volume": "250 ml", "fun": -1, diff --git a/data/json/items/comestibles/raw_veggy.json b/data/json/items/comestibles/raw_veggy.json index 45836345cf7c3..5958c6ebf4638 100644 --- a/data/json/items/comestibles/raw_veggy.json +++ b/data/json/items/comestibles/raw_veggy.json @@ -12,6 +12,7 @@ "calories": 743, "description": "Grainy cereal used for malting. A staple of brewing everywhere. It can also be ground into flour.", "price": 20, + "price_postapoc": 250, "material": "veggy", "volume": "1 L", "flags": [ "EDIBLE_FROZEN", "MILLABLE", "RAW" ], @@ -33,7 +34,8 @@ "symbol": ",", "material": [ "veggy" ], "volume": "250 ml", - "price": 0 + "price": 0, + "price_postapoc": 0 }, { "type": "COMESTIBLE", @@ -48,6 +50,7 @@ "calories": 66, "description": "It's a bit tough, but quite delicious.", "price": 400, + "price_postapoc": 50, "material": "veggy", "volume": "250 ml", "flags": [ "EATEN_HOT", "SMOKABLE", "RAW" ], @@ -67,6 +70,7 @@ "calories": 616, "description": "Seeds from a wild buckwheat plant. Not particularly good to eat in their raw state, they are commonly cooked or ground into flour.", "price": 90, + "price_postapoc": 400, "material": "veggy", "volume": "500 ml", "flags": [ "EDIBLE_FROZEN", "MILLABLE", "RAW" ], @@ -88,6 +92,7 @@ "calories": 35, "description": "Crisp white cabbage.", "price": 100, + "price_postapoc": 100, "material": "veggy", "volume": "2250 ml", "charges": 9, @@ -110,6 +115,7 @@ "calories": 30, "description": "A bunch of spinach leaves.", "price": 100, + "price_postapoc": 50, "material": "veggy", "volume": "2250 ml", "charges": 9, @@ -130,6 +136,7 @@ "calories": 28, "description": "A healthy root vegetable. Rich in vitamin A!", "price": 200, + "price_postapoc": 50, "material": "veggy", "volume": "125 ml", "charges": 6, @@ -150,6 +157,7 @@ "calories": 334, "description": "A stout branching rhizome from a cattail plant. Its crisp white flesh is very starchy and fibrous, but you really ought to cook it before you attempt to eat it.", "price": 0, + "price_postapoc": 10, "material": "veggy", "volume": "250 ml", "fun": -12, @@ -168,6 +176,7 @@ "calories": 25, "description": "A stiff green stalk from a cattail plant. It is starchy and fibrous, but it would be much better if you cooked it.", "price": 0, + "price_postapoc": 10, "material": "veggy", "volume": "250 ml", "fun": -8, @@ -188,6 +197,7 @@ "calories": 15, "description": "Neither tasty nor very nutritious, but it goes well with salad.", "price": 200, + "price_postapoc": 10, "material": "veggy", "volume": "1000 ml", "flags": [ "FREEZERBURN", "SMOKABLE", "RAW" ], @@ -208,6 +218,7 @@ "description": "Delicious golden kernels.", "price": 170, "//": "Thinking this is a single ear here.", + "price_postapoc": 50, "material": "veggy", "volume": "750 ml", "flags": [ "EATEN_HOT", "SMOKABLE", "RAW" ], @@ -228,6 +239,7 @@ "calories": 9, "description": "A tough protective capsule bulging with densely packed fibers and seeds, this cotton boll can be processed into usable material with the right tools.", "price": 100, + "price_postapoc": 10, "material": [ "veggy", "cotton" ], "volume": "250 ml", "charges": 4, @@ -246,6 +258,7 @@ "calories": 21, "description": "Spicy chili pepper.", "price": 50, + "price_postapoc": 50, "material": "veggy", "volume": "250 ml", "charges": 3, @@ -267,6 +280,7 @@ "calories": 48, "description": "Comes from the gourd family. Not tasty but very juicy.", "price": 300, + "price_postapoc": 50, "material": "veggy", "volume": "750 ml", "flags": [ "FREEZERBURN", "SMOKABLE", "RAW" ], @@ -285,6 +299,7 @@ "calories": 60, "description": "The large, tuberous root of a dahlia flower. It smells spicy, but is too starchy to eat without cooking.", "price": 100, + "price_postapoc": 25, "material": "veggy", "volume": "250 ml", "fun": -4, @@ -304,13 +319,13 @@ "//": "Serving Size is 1 cup of sliced roots. Salsify grows in bountiful clumps, it's a weed.", "description": "An herb with a small purple flower. The roots are nutritious, but tough and bland until cooked.", "price": 75, + "price_postapoc": 50, "material": "veggy", "volume": "250 ml", "fun": -2, "smoking_result": "dry_veggy", "flags": [ "RAW" ], - "vitamins": [ [ "vitC", 18 ], [ "iron", 5 ], [ "calcium", 8 ] ], - "rot_spawn": "GROUP_ROTTING_PLANT" + "vitamins": [ [ "vitC", 18 ], [ "iron", 5 ], [ "calcium", 8 ] ] }, { "type": "COMESTIBLE", @@ -324,12 +339,12 @@ "calories": 43, "description": "A modest blue flower. The flower's roots are very bitter and not meant to be eaten raw.", "price": 110, + "price_postapoc": 25, "material": "veggy", "volume": "250 ml", "fun": -8, "flags": [ "RAW" ], - "vitamins": [ [ "vitC", 5 ], [ "iron", 3 ], [ "calcium", 2 ] ], - "rot_spawn": "GROUP_ROTTING_PLANT" + "vitamins": [ [ "vitC", 5 ], [ "iron", 3 ], [ "calcium", 2 ] ] }, { "type": "COMESTIBLE", @@ -342,6 +357,7 @@ "//": "Also known as Queen Anne's Lace. It's that boring white flower that grows wild everywhere. Water hemlock looks almost exactly like wild carrot. The easiest way to tell them apart is by their scent. Please don't eat either of them at home, hemlock will kill you deader than Socrates.", "flags": [ "FORAGE_POISON", "RAW" ], "price": 90, + "price_postapoc": 50, "fun": -2 }, { @@ -360,7 +376,8 @@ "symbol": ",", "material": [ "veggy" ], "volume": "250 ml", - "price": 0 + "price": 0, + "price_postapoc": 0 }, { "type": "COMESTIBLE", @@ -376,6 +393,7 @@ "calories": 24, "description": "A pungent garlic bulb. Popular as a seasoning for its strong flavor. Can be disassembled to cloves.", "price": 300, + "price_postapoc": 50, "material": "garlic", "volume": "150 ml", "fun": -18, @@ -396,6 +414,7 @@ "calories": 87, "description": "A cluster of small cone-like flowers, indispensable for brewing beer.", "price": 20, + "price_postapoc": 50, "material": "veggy", "volume": "250 ml", "flags": [ "EDIBLE_FROZEN", "RAW" ], @@ -415,6 +434,7 @@ "calories": 6, "description": "A crisp head of iceberg lettuce.", "price": 100, + "price_postapoc": 50, "material": "veggy", "volume": "2500 ml", "charges": 10, @@ -437,7 +457,8 @@ "symbol": ",", "material": [ "veggy" ], "volume": "250 ml", - "price": 0 + "price": 0, + "price_postapoc": 10 }, { "type": "COMESTIBLE", @@ -452,6 +473,7 @@ "calories": 60, "description": "An aromatic onion used in cooking. Cutting these up can make your eyes sting!", "price": 50, + "price_postapoc": 50, "material": "veggy", "volume": "250 ml", "fun": -1, @@ -476,6 +498,7 @@ "calories": 35, "description": "A fluid bladder from a fungus based lifeform. Not very nutritious, but fine to eat anyway.", "price": 0, + "price_postapoc": 10, "material": "veggy", "volume": "250 ml", "flags": [ "SMOKABLE", "RAW" ], @@ -494,6 +517,7 @@ "calories": 162, "description": "Mildly toxic and not very tasty raw. When cooked, it is delicious.", "price": 90, + "price_postapoc": 50, "material": "veggy", "volume": "375 ml", "fun": -3, @@ -515,6 +539,7 @@ "calories": 122, "description": "A large vegetable, about the size of your head. Not very tasty raw, but is great for cooking.", "price": 250, + "price_postapoc": 600, "material": "veggy", "volume": "3 L", "charges": 12, @@ -537,6 +562,7 @@ "calories": 26, "description": "A collection of freshly picked yellow dandelions. In their current raw state they are quite bitter.", "price": 60, + "price_postapoc": 50, "material": "veggy", "volume": "250 ml", "stack_size": 4, @@ -558,6 +584,7 @@ "calories": 51, "description": "Burdock, a bitter thistle-like vegetable. Can be eaten raw or cooked.", "price": 60, + "price_postapoc": 50, "material": "veggy", "volume": "250 ml", "stack_size": 4, @@ -580,6 +607,7 @@ "calories": 27, "description": "Sour stems of the rhubarb plant, often used in baking pies.", "price": 410, + "price_postapoc": 50, "material": "veggy", "volume": "250 ml", "flags": [ "SMOKABLE", "RAW" ], @@ -598,6 +626,7 @@ "calories": 62, "description": "This fleshy root is ripe and flowing with sugars; just takes some processing to extract them.", "price": 50, + "price_postapoc": 50, "material": "veggy", "volume": "1 L", "charges": 4, @@ -620,10 +649,11 @@ "calories": 17, "description": "Dried leaves of a tropical plant. You can boil them into tea, or you can just eat them raw. They aren't too filling though.", "price": 1030, + "price_postapoc": 250, "material": "veggy", "primary_material": "dried_vegetable", "volume": "250 ml", - "flags": [ "EDIBLE_FROZEN", "RAW" ], + "flags": [ "EDIBLE_FROZEN", "RAW", "IRREPLACEABLE_CONSUMABLE" ], "charges": 20, "fun": -1 }, @@ -641,6 +671,7 @@ "calories": 41, "description": "Juicy red tomato. It gained popularity in Italy after being brought back from the New World.", "price": 90, + "price_postapoc": 50, "material": "tomato", "volume": "375 ml", "flags": [ "SMOKABLE" ], @@ -660,6 +691,7 @@ "calories": 34, "description": "A nutrient rich chunk of plant matter, could be eaten raw or cooked.", "price": 600, + "price_postapoc": 50, "material": "veggy", "flags": [ "TRADER_AVOID", "SMOKABLE", "RAW" ], "smoking_result": "dry_veggy", @@ -679,6 +711,7 @@ "use_action": "POISON", "description": "This is a chunk of fungal matter from some sort of alien mushroom creature. Eating unfamiliar mushrooms is a bad idea.", "price": 0, + "price_postapoc": 0, "smoking_result": "dry_veggy_tainted" }, { @@ -689,6 +722,7 @@ "description": "An assortment of edible-looking wild plants. Most are quite bitter-tasting. Some are inedible until cooked.", "//": "In real life many root vegetables are mildly toxic until cooked", "fun": -10, + "price_postapoc": 10, "flags": [ "FREEZERBURN", "SMOKABLE", "RAW" ] }, { @@ -704,6 +738,7 @@ "calories": 33, "description": "A tasty summer squash.", "price": 300, + "price_postapoc": 50, "material": "veggy", "volume": "250 ml", "flags": [ "EATEN_HOT", "SMOKABLE" ], @@ -724,7 +759,8 @@ "symbol": ",", "material": [ "veggy" ], "volume": "250 ml", - "price": 0 + "price": 0, + "price_postapoc": 25 }, { "type": "COMESTIBLE", @@ -739,6 +775,7 @@ "calories": 56, "description": "Raw, uncooked beans. They are mildly toxic in this form, but you could cook them to make them tasty.", "price": 90, + "price_postapoc": 25, "material": "veggy", "fun": -1, "cooks_like": "beans_cooked", @@ -759,6 +796,7 @@ "calories": 42, "description": "Raw, uncooked lentils. They could be cooked.", "price": 90, + "price_postapoc": 25, "material": "veggy", "fun": -1, "cooks_like": "lentils_cooked", @@ -779,12 +817,12 @@ "calories": 18, "description": "A handful of immature fern fronds, still curled up like the head of a fiddle. Delicious when cooked, but consuming raw can cause food poisoning.", "price": 40, + "price_postapoc": 10, "material": "veggy", "volume": "62 ml", "fun": -10, "healthy": -2, "//": "Fiddleheads that haven't been boiled can make you sick.", - "vitamins": [ [ "vitC", 6 ], [ "vitA", 10 ], [ "calcium", 4 ] ], - "rot_spawn": "GROUP_ROTTING_PLANT" + "vitamins": [ [ "vitC", 6 ], [ "vitA", 10 ], [ "calcium", 4 ] ] } ] diff --git a/data/json/items/comestibles/sandwich.json b/data/json/items/comestibles/sandwich.json index 2cf8a04aac9ba..827b3c54f1545 100644 --- a/data/json/items/comestibles/sandwich.json +++ b/data/json/items/comestibles/sandwich.json @@ -13,6 +13,7 @@ "calories": 366, "description": "A delicious grilled cheese sandwich, because everything is better with melted cheese.", "price": 550, + "price_postapoc": 200, "material": [ "milk", "wheat" ], "primary_material": "wheat", "volume": "250 ml", @@ -42,6 +43,7 @@ "calories": 449, "description": "A sandwich of meat, vegetables, and cheese with condiments. Tasty and nutritious!", "price": 1200, + "price_postapoc": 300, "material": [ "flesh", "veggy", "wheat", "milk" ], "primary_material": "processed_food", "volume": "1500 ml", @@ -63,7 +65,7 @@ "healthy": 1, "calories": 516, "description": "A refreshing cucumber sandwich. Not very filling, but quite tasty.", - "price": 400, + "price": 250, "volume": "1250 ml", "material": [ "wheat", "veggy" ], "flags": [ "EATEN_COLD" ], @@ -83,6 +85,7 @@ "calories": 366, "description": "A simple cheese sandwich.", "price": 500, + "price_postapoc": 200, "material": [ "milk", "wheat" ], "primary_material": "wheat", "volume": "500 ml", @@ -103,6 +106,7 @@ "calories": 262, "description": "A delicious jam sandwich.", "price": 200, + "price_postapoc": 200, "material": [ "fruit", "wheat" ], "primary_material": "wheat", "volume": "500 ml", @@ -122,6 +126,7 @@ "calories": 640, "description": "An 'open-faced sandwich' consisting of sliced white bread, a healthy crust-to-crust slathering of butter, and sprinkles. Supposedly a staple of birthday parties in Australia.", "price": 85, + "price_postapoc": 300, "material": [ "junk", "wheat" ], "primary_material": "wheat", "volume": "250 ml", @@ -142,6 +147,7 @@ "calories": 535, "description": "A delicious honey sandwich.", "price": 500, + "price_postapoc": 300, "material": [ "honey", "wheat" ], "primary_material": "wheat", "volume": "500 ml", @@ -160,6 +166,7 @@ "quench": 1, "description": "A simple sauce sandwich. Not very filling but beats eating just the bread.", "price": 200, + "price_postapoc": 200, "fun": 2 }, { @@ -177,6 +184,7 @@ "calories": 502, "description": "Bread and vegetables, that's it.", "price": 800, + "price_postapoc": 250, "material": [ "veggy", "wheat" ], "volume": "750 ml", "flags": [ "EATEN_COLD" ], @@ -200,6 +208,7 @@ "calories": 433, "description": "Bread and meat, that's it.", "price": 900, + "price_postapoc": 250, "material": [ "flesh", "wheat" ], "volume": "1 L", "charges": 2, @@ -220,6 +229,7 @@ "calories": 658, "description": "Some peanut butter smothered between two pieces of bread. Not very filling and will stick to the roof of your mouth like glue.", "price": 250, + "price_postapoc": 300, "material": "wheat", "volume": "250 ml", "fun": 3, @@ -239,6 +249,7 @@ "calories": 378, "description": "A delicious peanut butter and jelly sandwich. It reminds you of the times your mother would make you lunch.", "price": 175, + "price_postapoc": 175, "material": [ "fruit", "wheat" ], "primary_material": "wheat", "volume": "250 ml", @@ -259,6 +270,7 @@ "calories": 365, "description": "Some damned fool put honey on this peanut butter sandwich, who in their right mind- oh wait this is pretty good.", "price": 175, + "price_postapoc": 175, "material": [ "wheat", "honey" ], "primary_material": "wheat", "volume": "250 ml", @@ -279,6 +291,7 @@ "calories": 712, "description": "Who knew you could mix maple syrup and peanut butter to create yet another different sandwich?", "price": 175, + "price_postapoc": 175, "material": "wheat", "volume": "250 ml", "fun": 6, @@ -297,6 +310,7 @@ "calories": 481, "description": "A delicious fish sandwich.", "price": 800, + "price_postapoc": 250, "material": [ "flesh", "wheat" ], "volume": "750 ml", "fun": 14, @@ -315,6 +329,7 @@ "calories": 700, "description": "A delicious fish bagel with spinach and eggs.", "price": 800, + "price_postapoc": 350, "material": [ "flesh", "wheat" ], "volume": "750 ml", "fun": 14, @@ -334,6 +349,7 @@ "calories": 447, "description": "A bacon, lettuce, and tomato sandwich on toasted bread.", "price": 400, + "price_postapoc": 250, "material": [ "flesh", "veggy", "wheat", "tomato" ], "primary_material": "processed_food", "volume": "1 L", diff --git a/data/json/items/comestibles/seed.json b/data/json/items/comestibles/seed.json index 676fe95679f34..e3d1e64bea01c 100644 --- a/data/json/items/comestibles/seed.json +++ b/data/json/items/comestibles/seed.json @@ -8,6 +8,7 @@ "volume": "250 ml", "weight": "1 g", "price": 120, + "price_postapoc": 25, "charges": 4, "stack_size": 100, "material": "veggy", @@ -672,6 +673,7 @@ "calories": 78, "description": "Some fried seeds of a sunflower, pumpkin or other plant. Quite nutritious and tasty.", "price": 80, + "price_postapoc": 50, "material": "veggy", "primary_material": "dried_vegetable", "volume": "250 ml", @@ -695,6 +697,7 @@ "calories": 9, "description": "Coffee pods taken from a Kentucky coffeetree. If washed thoroughly and roasted, you could use them to make a dark and bitter brew much like coffee.", "price": 100, + "price_postapoc": 50, "material": [ "veggy" ], "primary_material": "dried_vegetable", "volume": "250 ml", diff --git a/data/json/items/comestibles/soup.json b/data/json/items/comestibles/soup.json index 81be61dccee6c..034ed6dae1241 100644 --- a/data/json/items/comestibles/soup.json +++ b/data/json/items/comestibles/soup.json @@ -13,6 +13,7 @@ "calories": 13, "description": "Vegetable stock. Tasty and fairly nutritious.", "price": 350, + "price_postapoc": 25, "material": "veggy", "volume": "500 ml", "charges": 2, @@ -36,6 +37,7 @@ "calories": 43, "description": "A tasty and nutritious broth made from bones.", "price": 350, + "price_postapoc": 25, "material": "bone", "primary_material": "water", "volume": "500 ml", @@ -60,6 +62,7 @@ "calories": 84, "description": "A nutritious and delicious hearty vegetable soup.", "price": 400, + "price_postapoc": 25, "material": "veggy", "volume": "500 ml", "charges": 2, @@ -87,6 +90,7 @@ "calories": 257, "description": "A nutritious and delicious hearty meat soup.", "price": 400, + "price_postapoc": 100, "material": "flesh", "volume": "500 ml", "charges": 2, @@ -110,6 +114,7 @@ "calories": 359, "description": "A nutritious and delicious hearty fish soup.", "price": 400, + "price_postapoc": 100, "material": "flesh", "volume": "500 ml", "charges": 2, @@ -134,6 +139,7 @@ "calories": 209, "description": "Spicy, and filled with bits of peppers. It's pretty good.", "price": 750, + "price_postapoc": 75, "material": "veggy", "charges": 2, "volume": "500 ml", @@ -159,6 +165,7 @@ "calories": 381, "description": "Spicy, and filled with bits of peppers and meat! It's pretty good.", "price": 750, + "price_postapoc": 100, "material": [ "flesh", "veggy" ], "volume": "500 ml", "phase": "liquid", @@ -183,6 +190,7 @@ "calories": 304, "description": "A nutritious and delicious soup, made of gifts of nature.", "price": 350, + "price_postapoc": 100, "material": [ "flesh", "veggy" ], "volume": "500 ml", "charges": 2, @@ -206,6 +214,7 @@ "calories": 65, "description": "Chicken chunks and noodles swimming in a salty broth. Rumored to help cure colds.", "price": 580, + "price_postapoc": 100, "material": [ "flesh", "wheat" ], "primary_material": "flesh", "volume": "500 ml", @@ -230,6 +239,7 @@ "calories": 70, "description": "A mushy, gray semi-liquid soup made from mushrooms.", "price": 450, + "price_postapoc": 100, "material": "mushroom", "volume": "500 ml", "phase": "liquid", @@ -253,6 +263,7 @@ "calories": 90, "description": "It smells of tomatoes. Not very filling, but it goes well with grilled cheese.", "price": 400, + "price_postapoc": 50, "material": "tomato", "volume": "250 ml", "phase": "liquid", @@ -276,6 +287,7 @@ "calories": 358, "description": "A soup with chicken chunks and balls of dough. Not bad.", "price": 500, + "price_postapoc": 100, "material": [ "flesh", "wheat" ], "primary_material": "flesh", "volume": "500 ml", @@ -300,6 +312,7 @@ "calories": 387, "description": "A rich and tasty fish chowder from Scotland, made with preserved fish and creamy milk.", "price": 500, + "price_postapoc": 100, "material": [ "flesh", "milk" ], "volume": "500 ml", "charges": 2, diff --git a/data/json/items/comestibles/spice.json b/data/json/items/comestibles/spice.json index d35ebcd82562e..5cb2e8d8e8f3c 100644 --- a/data/json/items/comestibles/spice.json +++ b/data/json/items/comestibles/spice.json @@ -66,6 +66,7 @@ "symbol": "%", "description": "Sweet, sweet sugar. Bad for your teeth and surprisingly not very tasty on its own.", "price": 387, + "price_postapoc": 300, "material": [ "powder", "junk" ], "primary_material": "powder", "volume": "250 ml", @@ -83,6 +84,7 @@ "container": "bottle_plastic_small", "description": "Known as nonpareils, sprinkles, jimmies, sugar strands or 'hundreds-and-thousands', these colorful balls, rods or flakes of sugar and starch are intended for use decorating soft surfaces of sweets. Like sugar, they are bad for your teeth and surprisingly not very tasty on their own.", "price": 399, + "price_postapoc": 200, "calories": 20, "charges": 66 }, @@ -98,6 +100,7 @@ "calories": 9, "description": "A tasty collection of wild herbs including violet, sassafras, mint, clover, purslane, fireweed, and burdock.", "price": 190, + "price_postapoc": 50, "material": "veggy", "volume": "250 ml", "charges": 20, @@ -113,6 +116,7 @@ "name": { "str": "soy sauce", "str_pl": "soy sauce" }, "description": "Salty fermented soybean sauce.", "price": 190, + "price_postapoc": 25, "weight": "24 g", "volume": "250 ml", "calories": 17, @@ -140,7 +144,8 @@ "symbol": ",", "material": [ "veggy" ], "volume": "250 ml", - "price": 0 + "price": 0, + "price_postapoc": 10 }, { "id": "mustard_powder", diff --git a/data/json/items/comestibles/veggy_dishes.json b/data/json/items/comestibles/veggy_dishes.json index eb818207b6711..ab1d82aac8e46 100644 --- a/data/json/items/comestibles/veggy_dishes.json +++ b/data/json/items/comestibles/veggy_dishes.json @@ -8,6 +8,7 @@ "spoils_in": "2 days 12 hours", "description": "A cooked stalk from a cattail plant. Its fibrous outer leaves have been stripped away and now it is quite delicious.", "price": 0, + "price_postapoc": 10, "delete": { "flags": [ "RAW" ] }, "fun": 1 }, @@ -24,6 +25,7 @@ "calories": 620, "description": "Sticky, gooey carbohydrate paste extracted from plants. Spoils rather quickly if not prepared for storage.", "price": 0, + "price_postapoc": 10, "material": "veggy", "volume": "250 ml", "fun": -14, @@ -39,6 +41,7 @@ "healthy": 2, "description": "Cooked leaves from wild dandelions. Tasty and nutritious.", "price": 200, + "price_postapoc": 10, "flags": [ "EATEN_HOT", "FREEZERBURN", "SMOKABLE" ], "fun": 1 }, @@ -51,6 +54,7 @@ "spoils_in": "3 days", "description": "Wild dandelion flowers that have been battered and deep-fried. Very tasty and nutritious.", "price": 250, + "price_postapoc": 50, "flags": [ "EATEN_HOT", "FREEZERBURN" ], "fun": 5 }, @@ -63,6 +67,7 @@ "healthy": 2, "description": "Cooked burdock leaves. Tasty and nutritious.", "price": 200, + "price_postapoc": 50, "flags": [ "EATEN_HOT", "FREEZERBURN", "SMOKABLE" ], "fun": 1 }, @@ -77,6 +82,7 @@ "calories": 102, "description": "Wild burdocks that have been battered and deep-fried. Very tasty and nutritious.", "price": 250, + "price_postapoc": 50, "material": "veggy", "volume": "500 ml", "flags": [ "EATEN_HOT", "FREEZERBURN" ], @@ -93,6 +99,7 @@ "calories": 77, "description": "Wild dandelions and burdocks that have been battered and deep-fried. Very tasty and nutritious.", "price": 500, + "price_postapoc": 50, "material": "veggy", "volume": "500 ml", "flags": [ "EATEN_HOT", "FREEZERBURN" ], @@ -106,6 +113,7 @@ "spoils_in": "2 days 2 hours", "description": "A freshly cooked chunk of plant matter, tasty and nutritious.", "price": 700, + "price_postapoc": 50, "flags": [ "EATEN_HOT", "TRADER_AVOID" ] }, { @@ -116,6 +124,7 @@ "spoils_in": "2 days 2 hours", "description": "Cooked wild edible plants. An interesting mix of flavors.", "price": 700, + "price_postapoc": 50, "flags": [ "EATEN_HOT" ] }, { @@ -130,6 +139,7 @@ "calories": 174, "description": "A dish in which vegetables are set into a gelatin made from a plant stock.", "price": 1500, + "price_postapoc": 150, "material": "veggy", "volume": "500 ml", "charges": 2, @@ -145,6 +155,7 @@ "healthy": 2, "description": "A serving of cooked buckwheat groats. Healthy and nutritious but bland.", "price": 120, + "price_postapoc": 50, "flags": [ "EATEN_HOT" ], "fun": 0 }, @@ -166,6 +177,7 @@ "charges": 2, "description": "Canned corn in water. Eat up!", "price": 200, + "price_postapoc": 150, "flags": [ "EATEN_HOT" ] }, { @@ -183,6 +195,7 @@ "vitamins": [ [ "iron", 3 ] ], "description": "This yellow cornmeal is useful for baking.", "price": 450, + "price_postapoc": 25, "material": [ "veggy", "powder" ], "volume": "250 ml", "flags": [ "EDIBLE_FROZEN" ], @@ -203,6 +216,7 @@ "vitamins": [ [ "vitC", 3 ], [ "calcium", 8 ], [ "iron", 32 ] ], "description": "Slow-cooked beans with vegetables. Tasty and very filling.", "price": 700, + "price_postapoc": 100, "material": [ "veggy", "bean" ], "volume": "500 ml", "//": "one beans + one veggy", @@ -223,6 +237,7 @@ "calories": 222, "description": "Dehydrated long-grain rice. Tasty and nutritious when cooked, virtually inedible when dry.", "price": 500, + "price_postapoc": 300, "material": "veggy", "primary_material": "dried_vegetable", "volume": "250 ml", @@ -244,6 +259,7 @@ "healthy": 1, "description": "A hearty serving of cooked long-grain white rice.", "price": 100, + "price_postapoc": 50, "flags": [ "EATEN_HOT", "FREEZERBURN" ], "fun": 2, "//": "rice triples in size when cooked", @@ -263,6 +279,7 @@ "calories": 383, "description": "Delicious fried rice with vegetables. Tasty and very filling.", "price": 700, + "price_postapoc": 150, "material": "veggy", "volume": "250 ml", "flags": [ "EATEN_HOT", "FREEZERBURN" ], @@ -282,6 +299,7 @@ "calories": 425, "description": "A serving of beans and rice that has been cooked together. Delicious and healthy!", "price": 500, + "price_postapoc": 150, "material": [ "veggy", "bean" ], "volume": "250 ml", "flags": [ "EATEN_HOT", "FREEZERBURN" ], @@ -301,6 +319,7 @@ "calories": 479, "description": "Delicious tofu fried rice with vegetables. Tasty and very filling.", "price": 600, + "price_postapoc": 150, "material": "veggy", "volume": "250 ml", "flags": [ "EATEN_HOT", "NUTRIENT_OVERRIDE" ], @@ -321,6 +340,7 @@ "charges": 4, "description": "A tofu stirfry with rice and a sweet bold flavor sure to be on your mind through these dark days.", "price": 1200, + "price_postapoc": 200, "material": "veggy", "volume": "1 L", "flags": [ "EATEN_HOT", "NUTRIENT_OVERRIDE" ], @@ -340,6 +360,7 @@ "calories": 459, "description": "Slow-cooked beans and rice with vegetables and seasonings. Tasty and very filling.", "price": 750, + "price_postapoc": 200, "material": [ "veggy", "bean" ], "volume": "750 ml", "//": "one bean + one rice + one veggy", @@ -360,6 +381,7 @@ "calories": 162, "description": "A delicious baked potato. Got any sour cream?", "price": 150, + "price_postapoc": 50, "material": "veggy", "volume": "250 ml", "flags": [ "EATEN_HOT", "NUTRIENT_OVERRIDE" ], @@ -377,6 +399,7 @@ "quench": 3, "description": "This is a simple dish made by cooking the pumpkin pulp and then mashing.", "price": 50, + "price_postapoc": 50, "material": "veggy", "volume": "250 ml", "delete": { "flags": [ "RAW" ] }, @@ -397,6 +420,7 @@ "calories": 490, "description": "A delicious baked pie with a delicious vegetable filling.", "price": 1250, + "price_postapoc": 2000, "material": [ "wheat", "veggy" ], "volume": "2 L", "charges": 8, @@ -417,6 +441,7 @@ "calories": 391, "description": "A vegetarian pizza, with delicious tomato sauce and a fluffy crust. Its smell brings back great memories.", "price": 990, + "price_postapoc": 500, "material": [ "wheat", "veggy", "tomato" ], "volume": "1 L", "charges": 4, @@ -438,6 +463,7 @@ "calories": 244, "description": "Olive oil, basil, garlic, pine nuts. Simple and delicious.", "price": 230, + "price_postapoc": 300, "material": [ "veggy", "nut", "garlic" ], "volume": "250 ml", "charges": 4, @@ -459,6 +485,7 @@ "calories": 93, "description": "This mushy pile of vegetable matter was boiled and canned in an earlier life. Better eat it before it oozes through your fingers.", "price": 250, + "price_postapoc": 150, "material": "veggy", "volume": "250 ml", "vitamins": [ [ "vitA", 73 ], [ "vitC", 11 ], [ "calcium", 5 ], [ "iron", 9 ] ] @@ -478,6 +505,7 @@ "calories": 115, "description": "Vegetable chunks pickled in a salt bath. Goes well with burgers, if only you can find one.", "price": 500, + "price_postapoc": 100, "material": "veggy", "volume": "250 ml", "vitamins": [ [ "vitA", 46 ], [ "vitC", 7 ], [ "calcium", 5 ], [ "iron", 9 ] ] @@ -495,6 +523,7 @@ "calories": 310, "description": "Spaghetti, with a generous helping of pesto on top. Yum!", "price": 1000, + "price_postapoc": 200, "material": [ "wheat", "veggy", "nut" ], "volume": "500 ml", "charges": 2, @@ -512,6 +541,7 @@ "quench": 5, "description": "A pickled cucumber. Rather sour, but tastes good and lasts for a long time.", "price": 250, + "price_postapoc": 50, "material": "veggy", "volume": "250 ml", "fun": 5 @@ -530,6 +560,7 @@ "calories": 230, "description": "This is a delicious sautee of lovely diced onions and sauerkraut. The smell alone is enough to make your mouth water.", "price": 500, + "price_postapoc": 100, "material": "veggy", "//": "assumes the sauerkraut and onions cook down to half their raw values. vitamins and calories are the two added together", "volume": "250 ml", @@ -560,6 +591,7 @@ "quench": -3, "description": "Dehydrated vegetable flakes. With proper storage, this dried food will remain edible for an incredibly long time.", "price": 900, + "price_postapoc": 100, "material": "veggy", "primary_material": "dried_vegetable", "volume": "250 ml", @@ -575,6 +607,7 @@ "spoils_in": "1 day", "description": "Reconstituted vegetable flakes, which are much more enjoyable to eat now that they have been rehydrated.", "price": 900, + "price_postapoc": 50, "delete": { "flags": [ "RAW" ] }, "fun": 2 }, @@ -593,6 +626,7 @@ "calories": 250, "description": "Salad with all kind of vegetables.", "price": 350, + "price_postapoc": 100, "material": "veggy", "volume": "250 ml", "fun": 1, @@ -611,6 +645,7 @@ "description": "Dried salad packed in a box with mayonnaise and ketchup. Add water to enjoy.", "primary_material": "dried_vegetable", "price": 220, + "price_postapoc": 100, "volume": "125 ml", "flags": [ "EDIBLE_FROZEN" ], "fun": -2 @@ -622,7 +657,8 @@ "copy-from": "veggy_salad", "quench": 16, "description": "Dried salad with water added, not very tasty but still a decent substitution for real salad.", - "price": 250 + "price": 250, + "price_postapoc": 50 }, { "type": "COMESTIBLE", @@ -633,9 +669,9 @@ "healthy": 2, "description": "Baking this dahlia root has broken down the starch, making it softer and sweeter.", "price": 110, + "price_postapoc": 50, "flags": [ "EATEN_HOT" ], - "fun": 2, - "rot_spawn": "GROUP_ROTTING_PLANT" + "fun": 2 }, { "type": "COMESTIBLE", @@ -646,9 +682,9 @@ "healthy": 2, "description": "When properly cooked, salsify tastes vaguely like oysters. Makes a great side dish.", "price": 90, + "price_postapoc": 50, "flags": [ "EATEN_HOT" ], "fun": 2, - "rot_spawn": "GROUP_ROTTING_PLANT", "//": "From Oregon Trail. Be prepared to lose it as soon as your wagon tips over." }, { @@ -665,6 +701,7 @@ "calories": 200, "description": "A serving of sticky vinegared rice commonly used in sushi.", "price": 100, + "price_postapoc": 400, "material": "veggy", "volume": "250 ml", "charges": 4, @@ -685,6 +722,7 @@ "calories": 90, "description": "A triangular block of tasty sushi rice with a healthy green vegetable folded around it.", "price": 210, + "price_postapoc": 100, "material": "veggy", "volume": "250 ml", "charges": 2, @@ -705,6 +743,7 @@ "calories": 209, "description": "Delicious chopped vegetables wrapped in tasty sushi rice and rolled up in a healthy green vegetable.", "price": 290, + "price_postapoc": 150, "material": "veggy", "volume": "250 ml", "fun": 12, @@ -720,6 +759,7 @@ "use_action": "POISON", "description": "Pieces of alien mushroom that have been dried to prevent them from rotting away. It will still poison you if you eat this.", "price": 0, + "price_postapoc": 0, "flags": [ "EDIBLE_FROZEN" ] }, { @@ -737,6 +777,7 @@ "calories": 43, "description": "This crunchy, sour topping made from lettuce or cabbage is perfect for your hot dogs and hamburgers, or, if you're desperate, straight to your stomach.", "price": 450, + "price_postapoc": 50, "material": "veggy", "volume": "250 ml", "vitamins": [ [ "vitC", 85 ], [ "calcium", 17 ] ], @@ -756,6 +797,7 @@ "calories": 45, "description": "A less prickly version of cactus pads.", "price": 100, + "price_postapoc": 50, "material": "veggy", "volume": "500 ml", "vitamins": [ [ "vitA", 27 ], [ "vitC", 27 ], [ "calcium", 48 ], [ "iron", 9 ] ], @@ -774,12 +816,12 @@ "calories": 18, "description": "Boiled fiddleheads. Not bad, but would be better sauteed in butter.", "price": 80, + "price_postapoc": 25, "material": "veggy", "volume": "120 ml", "fun": 1, "healthy": 1, - "vitamins": [ [ "vitC", 6 ], [ "vitA", 10 ], [ "calcium", 4 ] ], - "rot_spawn": "GROUP_ROTTING_PLANT" + "vitamins": [ [ "vitC", 6 ], [ "vitA", 10 ], [ "calcium", 4 ] ] }, { "type": "COMESTIBLE", @@ -794,11 +836,11 @@ "calories": 160, "description": "Fiddleheads sauteed in fat. Tender and delicious.", "price": 400, + "price_postapoc": 50, "material": "veggy", "volume": "240 ml", "fun": 5, "healthy": 1, - "vitamins": [ [ "vitC", 32 ], [ "vitA", 40 ], [ "calcium", 4 ] ], - "rot_spawn": "GROUP_ROTTING_PLANT" + "vitamins": [ [ "vitC", 32 ], [ "vitA", 40 ], [ "calcium", 4 ] ] } ] diff --git a/data/json/items/comestibles/wheat.json b/data/json/items/comestibles/wheat.json index 2366dbc287b5d..df12252b88c03 100644 --- a/data/json/items/comestibles/wheat.json +++ b/data/json/items/comestibles/wheat.json @@ -14,6 +14,7 @@ "calories": 180, "description": "Whole-grain wheat cereal. It's surprisingly good, and allegedly good for your heart.", "price": 300, + "price_postapoc": 600, "material": "wheat", "volume": "1 L", "flags": [ "EDIBLE_FROZEN" ], @@ -34,6 +35,7 @@ "calories": 667, "description": "Raw wheat, not very tasty.", "price": 120, + "price_postapoc": 100, "material": "wheat", "volume": "250 ml", "flags": [ "EDIBLE_FROZEN", "MILLABLE", "RAW" ], @@ -53,6 +55,7 @@ "calories": 222, "description": "A type of pasta usually used when preparing spaghetti. It could be eaten raw if you're desperate, but is much better cooked.", "price": 120, + "price_postapoc": 100, "material": "wheat", "volume": "62 ml", "flags": [ "EDIBLE_FROZEN", "RAW" ], @@ -72,6 +75,7 @@ "calories": 222, "description": "A pasta sheet used in making lasagne. It could be eaten raw if you're desperate, but is much better cooked.", "price": 120, + "price_postapoc": 100, "material": "wheat", "volume": "62 ml", "flags": [ "EDIBLE_FROZEN", "RAW" ], @@ -92,6 +96,7 @@ "calories": 222, "description": "Fresh wet noodles. Fairly bland, but fills you up.", "price": 20, + "price_postapoc": 50, "material": "wheat", "volume": "250 ml", "flags": [ "EATEN_HOT", "TRADER_AVOID" ], @@ -110,6 +115,7 @@ "calories": 222, "description": "It could be eaten raw if you're desperate, but is much better cooked.", "price": 150, + "price_postapoc": 100, "material": "wheat", "flags": [ "EDIBLE_FROZEN", "RAW" ], "volume": "62 ml", @@ -130,6 +136,7 @@ "calories": 397, "description": "When the cheese starts flowing, Kraft gets your noodle going.", "price": 380, + "price_postapoc": 50, "material": [ "wheat", "milk" ], "volume": "250 ml", "flags": [ "EATEN_HOT", "TRADER_AVOID", "FREEZERBURN" ], @@ -150,6 +157,7 @@ "calories": 48, "description": "This enriched white flour is useful for baking.", "price": 450, + "price_postapoc": 100, "material": [ "wheat", "powder" ], "volume": "250 ml", "flags": [ "EDIBLE_FROZEN", "RAW" ], @@ -170,6 +178,7 @@ "calories": 10, "description": "Dry flakes of flattened grain. Tasty and nutritious when cooked, it also doubles as food for horses while dry.", "price": 7500, + "price_postapoc": 50, "material": "wheat", "volume": "250 ml", "cooks_like": "oatmeal_cooked", @@ -191,6 +200,7 @@ "calories": 323, "description": "Raw oats.", "price": 120, + "price_postapoc": 100, "material": "wheat", "volume": "250 ml", "flags": [ "EDIBLE_FROZEN", "MILLABLE", "RAW" ], @@ -210,6 +220,7 @@ "calories": 175, "description": "A filling and nutritious New England classic that has sustained pioneers and captains of industry alike.", "price": 500, + "price_postapoc": 50, "material": "wheat", "volume": "250 ml", "flags": [ "EATEN_HOT", "NUTRIENT_OVERRIDE" ], @@ -229,6 +240,7 @@ "calories": 112, "description": "A filling and nutritious New England classic that has been improved with the addition of extra wholesome ingredients.", "price": 550, + "price_postapoc": 75, "material": "wheat", "volume": "375 ml", "charges": 2, @@ -249,6 +261,7 @@ "calories": 121, "description": "Fluffy and delicious pancakes with real maple syrup.", "price": 550, + "price_postapoc": 50, "material": [ "wheat", "milk" ], "primary_material": "wheat", "volume": "250 ml", @@ -267,6 +280,7 @@ "calories": 113, "description": "Fluffy and delicious pancakes with real maple syrup, made sweeter and healthier with the addition of wholesome fruit.", "price": 650, + "price_postapoc": 75, "fun": 4, "vitamins": [ [ "vitA", 2 ], [ "vitC", 30 ], [ "calcium", 4 ], [ "iron", 3 ] ] }, @@ -283,6 +297,7 @@ "calories": 110, "description": "Slices of bread dipped in a milk and egg mixture then fried.", "price": 600, + "price_postapoc": 100, "material": [ "wheat", "milk", "egg" ], "primary_material": "wheat", "volume": "250 ml", @@ -303,6 +318,7 @@ "calories": 458, "description": "Hey it's waffle time, it's waffle time. Won't you have some waffles of mine?", "price": 550, + "price_postapoc": 200, "material": [ "wheat", "milk" ], "primary_material": "wheat", "volume": "250 ml", @@ -323,6 +339,7 @@ "calories": 446, "description": "Crunchy and delicious waffles with real maple syrup, made sweeter and healthier with the addition of wholesome fruit.", "price": 600, + "price_postapoc": 250, "material": [ "wheat", "fruit", "milk" ], "primary_material": "wheat", "volume": "375 ml", @@ -344,6 +361,7 @@ "calories": 280, "description": "Dry and salty, these crackers will leave you quite thirsty.", "price": 110, + "price_postapoc": 600, "material": "wheat", "volume": "1 L", "flags": [ "EDIBLE_FROZEN" ], @@ -366,6 +384,7 @@ "calories": 296, "description": "A delicious baked pie with a sweet fruit filling.", "price": 1250, + "price_postapoc": 800, "material": [ "wheat", "fruit" ], "volume": "2 L", "charges": 8, @@ -387,6 +406,7 @@ "calories": 452, "description": "A delicious pizza with molten cheese on top.", "price": 990, + "price_postapoc": 600, "material": [ "wheat", "milk" ], "primary_material": "wheat", "volume": "1 L", @@ -410,6 +430,7 @@ "calories": 157, "description": "A tasty and nutritious mixture of oats, honey, and other ingredients that has been baked until crisp.", "price": 350, + "price_postapoc": 450, "material": [ "wheat", "fruit" ], "primary_material": "wheat", "volume": "250 ml", @@ -433,6 +454,7 @@ "calories": 300, "description": "A sweet and delicious baked pie with pure maple syrup.", "price": 1850, + "price_postapoc": 1500, "material": [ "wheat", "milk" ], "primary_material": "wheat", "volume": "1 L", @@ -455,6 +477,7 @@ "calories": 356, "description": "So-called ramen noodles. Can be eaten raw.", "price": 200, + "price_postapoc": 100, "material": "wheat", "volume": "500 ml", "vitamins": [ [ "calcium", 1 ], [ "iron", 18 ] ], @@ -474,6 +497,7 @@ "calories": 330, "description": "This traditional Scottish treat is a sweet and filling little boiled cake studded with dried fruit.", "price": 195, + "price_postapoc": 125, "material": [ "wheat", "fruit" ], "volume": "250 ml", "stack_size": 1, @@ -494,6 +518,7 @@ "calories": 260, "description": "Filling bread buns, taste good with tea on a Sunday morning breakfast.", "price": 550, + "price_postapoc": 500, "material": [ "wheat", "milk" ], "primary_material": "wheat", "volume": "750 ml", @@ -512,6 +537,7 @@ "weight": "68 g", "volume": "750 ml", "price": 5000, + "price_postapoc": 300, "charges": 4, "material": "wheat", "symbol": "%", @@ -527,6 +553,7 @@ "type": "COMESTIBLE", "name": "space cake", "copy-from": "sponge_cake", + "price_postapoc": 500, "description": "This cake's destiny is to take you on a gnarly trip.", "fun": 12, "use_action": "WEED_CAKE" @@ -537,6 +564,7 @@ "name": "brownie", "copy-from": "sponge_cake", "description": "A rich chocolate brownie, just like how grandma used to bake them.", + "price_postapoc": 400, "weight": "45 g", "calories": 292, "fun": 7 @@ -547,6 +575,7 @@ "name": { "str": "'special' brownie" }, "copy-from": "brownie", "description": "This is definitely not how grandma used to bake them.", + "price_postapoc": 500, "fun": 15, "use_action": "WEED_CAKE" } diff --git a/data/json/items/gun/762.json b/data/json/items/gun/762.json index 3fd911e2f8ae6..3d39dd8aebb05 100644 --- a/data/json/items/gun/762.json +++ b/data/json/items/gun/762.json @@ -6,8 +6,8 @@ "reload_noise_volume": 10, "name": { "str": "AKM" }, "description": "One of the most recognizable assault rifles ever made, the AKM is renowned for its durability even under the worst conditions.", - "weight": "3300 g", - "volume": "1750 ml", + "weight": "3402 g", + "volume": "4414 ml", "price": 290000, "price_postapoc": 4000, "to_hit": -1, @@ -20,7 +20,6 @@ "dispersion": 180, "durability": 9, "modes": [ [ "DEFAULT", "semi-auto", 1 ], [ "AUTO", "auto", 4 ] ], - "barrel_length": "250 ml", "valid_mod_locations": [ [ "accessories", 4 ], [ "barrel", 1 ], @@ -29,14 +28,13 @@ [ "grip", 1 ], [ "mechanism", 4 ], [ "muzzle", 1 ], - [ "rail", 1 ], - [ "sights", 1 ], + [ "rail mount", 1 ], + [ "sights mount", 1 ], [ "sling", 1 ], [ "stock", 1 ], - [ "underbarrel", 1 ] + [ "underbarrel mount", 1 ] ], - "magazines": [ [ "762", [ "akmmag", "akmbigmag" ] ] ], - "flags": [ "NEVER_JAMS" ] + "magazines": [ [ "762", [ "akmag30", "akmag10", "akmag20", "akmag40", "akdrum75" ] ] ] }, { "id": "arx160", @@ -76,7 +74,7 @@ [ "stock", 1 ], [ "underbarrel", 1 ] ], - "magazines": [ [ "762", [ "akmmag", "akmbigmag" ] ] ] + "magazines": [ [ "762", [ "akmag30", "akmag10", "akmag20", "akmag40" ] ] ] }, { "id": "sks", @@ -118,5 +116,78 @@ ], "magazines": [ [ "762", [ "762x39_clip" ] ] ], "flags": [ "RELOAD_ONE", "NEVER_JAMS" ] + }, + { + "id": "aksemi", + "looks_like": "ar15", + "type": "GUN", + "reload_noise_volume": 10, + "name": { "str": "AK-47" }, + "description": "Civilian-legal clones of the iconic Kalashnikov, like this one, were manufactured and imported by many different firms. Even without full-auto function, their solid firepower and reliability in harsh conditions make them valuable weapons in this new world.", + "weight": "3402 g", + "volume": "4414 ml", + "price": 79500, + "to_hit": -1, + "bashing": 12, + "material": [ "steel", "wood" ], + "symbol": "(", + "color": "brown", + "ammo": "762", + "skill": "rifle", + "dispersion": 180, + "durability": 8, + "modes": [ [ "DEFAULT", "semi-auto", 1 ] ], + "valid_mod_locations": [ + [ "accessories", 4 ], + [ "barrel", 1 ], + [ "bore", 1 ], + [ "brass catcher", 1 ], + [ "grip", 1 ], + [ "mechanism", 4 ], + [ "muzzle", 1 ], + [ "rail mount", 1 ], + [ "sights mount", 1 ], + [ "sling", 1 ], + [ "stock", 1 ], + [ "underbarrel mount", 1 ] + ], + "magazines": [ [ "762", [ "akmag30", "akmag10", "akmag20", "akmag40", "akdrum75" ] ] ] + }, + { + "id": "draco", + "looks_like": "ar15", + "type": "GUN", + "reload_noise_volume": 10, + "name": { "str": "Mini Draco" }, + "description": "Essentially a semi-auto AK with a short barrel and no stock, this unwieldy \"pistol\" has seen some popularity with civilian shooters and gangbangers alike.", + "weight": "2563 g", + "volume": "2167 ml", + "price": 72500, + "to_hit": -5, + "bashing": 8, + "material": [ "steel", "wood" ], + "symbol": "(", + "color": "brown", + "ammo": "762", + "skill": "pistol", + "dispersion": 240, + "ranged_damage": -5, + "durability": 7, + "modes": [ [ "DEFAULT", "semi-auto", 1 ] ], + "valid_mod_locations": [ + [ "accessories", 4 ], + [ "barrel", 1 ], + [ "bore", 1 ], + [ "brass catcher", 1 ], + [ "grip", 1 ], + [ "mechanism", 4 ], + [ "muzzle", 1 ], + [ "rail mount", 1 ], + [ "sights mount", 1 ], + [ "sling", 1 ], + [ "stock mount", 1 ], + [ "underbarrel mount", 1 ] + ], + "magazines": [ [ "762", [ "akmag30", "akmag10", "akmag20", "akmag40", "akdrum75" ] ] ] } ] diff --git a/data/json/items/magazine/762.json b/data/json/items/magazine/762.json index be25f54a1823f..aac28518aa064 100644 --- a/data/json/items/magazine/762.json +++ b/data/json/items/magazine/762.json @@ -17,31 +17,47 @@ "flags": [ "SPEEDLOADER" ] }, { - "id": "akmbigmag", + "id": "akmag10", "looks_like": "stanag30", "type": "MAGAZINE", - "name": { "str": "AKM extended magazine" }, - "description": "A 40-round, 7.62x39mm magazine initially designed for the RPK but compatible with the AKM rifle.", - "weight": "570 g", - "volume": "750 ml", - "price": 8300, + "name": { "str": "AK 10-round magazine" }, + "description": "A compact 10-round magazine for 7.62x39 AK-pattern rifles, made of stamped sheet metal. Made for restricted civilian use.", + "weight": "130 g", + "volume": "151 ml", + "price": 3000, "material": "steel", "symbol": "#", "color": "light_gray", "ammo_type": "762", - "capacity": 40, - "reliability": 8, - "reload_time": 120, - "flags": [ "MAG_BULKY" ] + "capacity": 10, + "reliability": 9, + "flags": [ "MAG_COMPACT" ] + }, + { + "id": "akmag20", + "looks_like": "stanag30", + "type": "MAGAZINE", + "name": { "str": "AK 20-round magazine" }, + "description": "A compact 20-round magazine for 7.62x39 AK-pattern rifles, made of stamped sheet metal. Originally designed for tank crews.", + "weight": "283 g", + "volume": "265 ml", + "price": 3000, + "material": "steel", + "symbol": "#", + "color": "light_gray", + "ammo_type": "762", + "capacity": 20, + "reliability": 9, + "flags": [ "MAG_COMPACT" ] }, { - "id": "akmmag", + "id": "akmag30", "looks_like": "stanag30", "type": "MAGAZINE", - "name": { "str": "AKM magazine" }, - "description": "A standard 30-round magazine made for the AKM rifle, made of stamped sheet metal.", - "weight": "430 g", - "volume": "500 ml", + "name": { "str": "AK 30-round magazine" }, + "description": "A standard 30-round magazine for 7.62x39 AK-pattern rifles, made of stamped sheet metal.", + "weight": "326 g", + "volume": "379 ml", "price": 2800, "material": "steel", "symbol": "#", @@ -50,5 +66,39 @@ "capacity": 30, "reliability": 9, "flags": [ "MAG_COMPACT" ] + }, + { + "id": "akmag40", + "looks_like": "stanag30", + "type": "MAGAZINE", + "name": { "str": "AK 40-round magazine" }, + "description": "An extended 40-round magazine for 7.62x39 AK-pattern rifles, made of stamped sheet metal.", + "weight": "424 g", + "volume": "493 ml", + "price": 4500, + "material": "steel", + "symbol": "#", + "color": "light_gray", + "ammo_type": "762", + "capacity": 40, + "reliability": 8, + "flags": [ "MAG_BULKY" ] + }, + { + "id": "akdrum75", + "looks_like": "stanag30", + "type": "MAGAZINE", + "name": { "str": "AK 75-round drum magazine" }, + "description": "A bulky 75-round drum magazine for 7.62x39 AK-pattern rifles, made of stamped sheet metal.", + "weight": "1020 g", + "volume": "1142 ml", + "price": 12000, + "material": "steel", + "symbol": "#", + "color": "light_gray", + "ammo_type": "762", + "capacity": 75, + "reliability": 7, + "flags": [ "MAG_BULKY" ] } ] diff --git a/data/json/items/migration.json b/data/json/items/migration.json index 015a7581331c1..53890b6f99216 100644 --- a/data/json/items/migration.json +++ b/data/json/items/migration.json @@ -1178,5 +1178,15 @@ "id": "p226mag_15rd_357sig", "type": "MIGRATION", "replace": "p226mag_12rd_357sig" + }, + { + "id": "akmmag", + "type": "MIGRATION", + "replace": "akmag30" + }, + { + "id": "akmbigmag", + "type": "MIGRATION", + "replace": "akmag40" } ] diff --git a/data/json/mapgen/house/house_detatched7.json b/data/json/mapgen/house/house_detatched7.json index 13b816a612f09..53362e391095a 100644 --- a/data/json/mapgen/house/house_detatched7.json +++ b/data/json/mapgen/house/house_detatched7.json @@ -119,13 +119,13 @@ " ", " |||| ", " |||||||||Fg||||||| ", - " |...........WJJZU| ", + " |1..........WJJZU| ", " |................| ", " |.......<........| ", " |................| ", " |................| ", " |................| ", - " ||||......|||||||| ", + " ||||2.....|||||||| ", " |......| ", " |......| ", " |......| ", @@ -140,7 +140,19 @@ " ", " " ], - "palettes": [ "basement_empty" ] + "palettes": [ "basement_empty" ], + "nested": { + "1": { + "chunks": [ + [ "null", 70 ], + [ "room_6x6_guns_E", 10 ], + [ "room_6x6_office_E", 40 ], + [ "room_6x6_brewer_E", 20 ], + [ "room_6x6_junk_E", 50 ] + ] + }, + "2": { "chunks": [ [ "null", 80 ], [ "home_office_4x4_N", 20 ], [ "home_office_4x4_S", 20 ] ] } + } } } ] diff --git a/data/json/mapgen/house/house_garage6.json b/data/json/mapgen/house/house_garage6.json index 2bf7e891b2083..0f2c2838319c8 100644 --- a/data/json/mapgen/house/house_garage6.json +++ b/data/json/mapgen/house/house_garage6.json @@ -127,19 +127,19 @@ " ", " ", " |||||||| ||||||||| ", + " |2.....| |3......| ", " |......| |.......| ", " |......| |.......| ", " |......| |.......| ", " |......| |.......| ", " |......| |.......| ", - " |......| |.......| ", - " |.....Z| |F......| ", - " |.....J| |.......| ", - " |.....W| |g......| ", - " |..A...| |.......| ", + " |.....Z| |.......| ", + " |F....J| |.......| ", + " |.....W| |.......| ", + " |..A..g| |.......| ", " |......|||||.......| ", " |..................| ", - " |......%.<.%.......| ", + " |1.....%.<.%.4.....| ", " |......%%%%%.......| ", " |.......zz.z.......| ", " |..........z.......| ", @@ -149,7 +149,51 @@ " ", " " ], - "palettes": [ "basement_empty" ] + "palettes": [ "basement_empty" ], + "nested": { + "1": { + "chunks": [ + [ "null", 70 ], + [ "room_6x6_guns_N", 10 ], + [ "room_6x6_guns_E", 10 ], + [ "room_6x6_office_E", 40 ], + [ "room_6x6_brewer_E", 20 ], + [ "room_6x6_brewer_N", 20 ], + [ "room_6x6_junk", 50 ] + ] + }, + "2": { + "chunks": [ + [ "null", 70 ], + [ "room_6x6_woodworker", 10 ], + [ "room_6x6_guns_S", 5 ], + [ "room_6x6_brewer_S", 10 ], + [ "room_6x6_bike", 20 ] + ] + }, + "3": { "chunks": [ [ "null", 95 ], [ "7x7_tent_indoors", 5 ], [ "room_7x7_recroom_S", 20 ] ] }, + "4": { + "chunks": [ + [ "null", 80 ], + [ "5x5_holdout_N", 2 ], + [ "5x5_holdout_W", 2 ], + [ "5x5_gym_N", 20 ], + [ "5x5_gym_S", 20 ], + [ "5x5_gym_E", 20 ], + [ "5x5_gym_W", 20 ], + [ "livingroom_5x5_S_1", 30 ], + [ "livingroom_5x5_E_1", 30 ], + [ "livingroom_5x5_N_1", 30 ], + [ "livingroom_5x5_W_1", 30 ], + [ "livingroom_5x5_S_2", 30 ], + [ "livingroom_5x5_E_2", 30 ], + [ "livingroom_5x5_N_2", 30 ], + [ "livingroom_5x5_W_2", 30 ], + [ "home_office_4x4_N", 20 ], + [ "home_office_4x4_S", 20 ] + ] + } + } } } ] diff --git a/data/json/mapgen/house/house_gardener.json b/data/json/mapgen/house/house_gardener.json index 7b7a5af4005c9..1666377fa216e 100644 --- a/data/json/mapgen/house/house_gardener.json +++ b/data/json/mapgen/house/house_gardener.json @@ -101,17 +101,17 @@ " ", " ", " ||||||| ", - " |.....| ", + " |2....| ", " |.....||||||||||||||| ", - " |................F.g| ", + " |.......g..1........| ", " |...................| ", - " |Z..................| ", - " |J..................| ", - " |JW.JJJ.............| ", + " |...................| ", + " |...................| ", + " |ZW.JJJ.............| ", " |%%+%%%.............| ", - " |t....%<............| ", - " |9.88S%.z...........| ", - " |||||||zzz..........| ", + " |9....%<............| ", + " |t.88S%.z...........| ", + " |||||||Fzz..........| ", " ||||||||||||||| ", " ", " ", @@ -123,7 +123,29 @@ " ", " " ], - "palettes": [ "basement_empty" ] + "palettes": [ "basement_empty" ], + "nested": { + "1": { "chunks": [ [ "null", 80 ], [ "room_9x9_recroom_W", 40 ], [ "room_9x9_cellar_W", 20 ], [ "room_9x9_weed_W", 5 ] ] }, + "2": { + "chunks": [ + [ "null", 90 ], + [ "5x5_holdout_S", 2 ], + [ "5x5_sauna_S", 10 ], + [ "5x5_gym_S", 20 ], + [ "5x5_gym_W", 20 ], + [ "livingroom_5x5_S_1", 30 ], + [ "livingroom_5x5_E_1", 30 ], + [ "livingroom_5x5_N_1", 30 ], + [ "livingroom_5x5_W_1", 30 ], + [ "livingroom_5x5_S_2", 30 ], + [ "livingroom_5x5_E_2", 30 ], + [ "livingroom_5x5_N_2", 30 ], + [ "livingroom_5x5_W_2", 30 ], + [ "home_office_4x4_N", 20 ], + [ "home_office_4x4_S", 20 ] + ] + } + } } } ] diff --git a/data/json/mapgen/house/house_rural.json b/data/json/mapgen/house/house_rural.json index 41d08dd4e60b8..629b0b07f1dc3 100644 --- a/data/json/mapgen/house/house_rural.json +++ b/data/json/mapgen/house/house_rural.json @@ -182,24 +182,44 @@ " |<..zz| ", " |....z| ", " |....z| ", + " |2....| ", " |.....| ", - " |..z..| ", " |.....| ", " |.....| ", " |.....| ", - " |.....|||| ", - " |.....JJJ| ", - " |.....z.W| ", - " |.......Z| ", + " |g....|||| ", + " ||..1....| ", + " |W.......| ", + " |Z.......| ", " |........| ", - " |...F..gz| ", + " |FJJ.....| ", " |||||||||| ", " ", " ", " ", " " ], - "palettes": [ "basement_empty" ] + "palettes": [ "basement_empty" ], + "nested": { + "1": { "chunks": [ [ "null", 70 ], [ "5x5_holdout_W", 10 ], [ "5x5_sauna_W", 20 ] ] }, + "2": { + "chunks": [ + [ "null", 80 ], + [ "5x5_gym_N", 20 ], + [ "5x5_gym_S", 20 ], + [ "5x5_gym_E", 20 ], + [ "5x5_gym_W", 20 ], + [ "livingroom_5x5_S_1", 30 ], + [ "livingroom_5x5_E_1", 30 ], + [ "livingroom_5x5_N_1", 30 ], + [ "livingroom_5x5_W_1", 30 ], + [ "livingroom_5x5_S_2", 30 ], + [ "livingroom_5x5_E_2", 30 ], + [ "livingroom_5x5_N_2", 30 ], + [ "livingroom_5x5_W_2", 30 ] + ] + } + } } } ] diff --git a/data/json/mapgen/nested/basement_nested.json b/data/json/mapgen/nested/basement_nested.json index e07c8fc30fc10..a5c158d7221dc 100644 --- a/data/json/mapgen/nested/basement_nested.json +++ b/data/json/mapgen/nested/basement_nested.json @@ -410,5 +410,2029 @@ { "item": "bedroom", "x": 2, "y": [ 3, 4 ], "chance": 55, "repeat": [ 1, 4 ] } ] } + }, + { + "type": "mapgen", + "method": "json", + "//": "a nested map for basement", + "nested_mapgen_id": "room_6x6_junk_S", + "object": { + "mapgensize": [ 6, 6 ], + "rotation": [ 0, 3 ], + "rows": [ + "||||||", + "|qz Q|", + "|q zQ|", + "|Uz 6|", + "|U 6|", + "||++||" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + " ": "t_thconc_floor", + "U": "t_thconc_floor", + "Q": "t_thconc_floor", + "6": "t_thconc_floor", + "z": "t_thconc_floor", + "q": "t_thconc_floor" + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "a nested map for basement", + "nested_mapgen_id": "room_6x6_junk_E", + "object": { + "mapgensize": [ 6, 6 ], + "rotation": [ 0, 3 ], + "rows": [ + "||||||", + "|qzQQ|", + "|q +", + "|Uz 6|", + "|U z6|", + "||||||" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + " ": "t_thconc_floor", + "U": "t_thconc_floor", + "Q": "t_thconc_floor", + "6": "t_thconc_floor", + "z": "t_thconc_floor", + "q": "t_thconc_floor" + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "a nested map for basement", + "nested_mapgen_id": "room_6x6_junk_W", + "object": { + "mapgensize": [ 6, 6 ], + "rotation": [ 0, 3 ], + "rows": [ + "||||||", + "|qqzQ|", + "+ Q|", + "|Uz 6|", + "|U z6|", + "||||||" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + " ": "t_thconc_floor", + "U": "t_thconc_floor", + "Q": "t_thconc_floor", + "6": "t_thconc_floor", + "z": "t_thconc_floor", + "q": "t_thconc_floor" + } + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "room_9x9_weed_N", + "//": "an grow area for various recreations", + "object": { + "mapgensize": [ 9, 9 ], + "rotation": [ 0, 3 ], + "rows": [ + "||||+||||", + "|RRR UUU|", + "|Q Q|", + "|Q QQQ Q|", + "|Q hTh Q|", + "|Q hTh Q|", + "|Q Q|", + "|HWX XCA|", + "|||||||||" + ], + "terrain": { + "|": "t_wall_w", + "+": "t_door_c", + " ": "t_linoleum_gray", + "C": "t_linoleum_gray", + "X": "t_linoleum_gray", + "W": "t_linoleum_gray", + "R": "t_linoleum_gray", + "H": "t_linoleum_gray", + "h": "t_linoleum_gray", + "U": "t_linoleum_gray", + "A": "t_linoleum_gray", + "Q": "t_linoleum_gray", + "T": "t_linoleum_gray" + }, + "liquids": { "H": { "liquid": "water_clean", "amount": [ 0, 100 ] } }, + "sealed_item": { "Q": { "item": { "item": "seed_weed" }, "furniture": "f_planter_harvest" } }, + "furniture": { + "T": "f_workbench", + "h": "f_chair", + "R": "f_rack", + "A": "f_air_filter", + "C": "f_air_conditioner", + "H": "f_water_heater", + "W": "f_water_purifier", + "X": [ "f_crate_c", "f_crate_o", "f_cardboard_box" ], + "U": "f_utility_shelf" + }, + "items": { + "T": [ { "item": "supplies_farming", "chance": 70 }, { "item": "weed_farm", "chance": 50 } ], + "R": [ { "item": "weed_farm", "chance": 70 } ], + "U": [ { "item": "home_hw", "chance": 50 } ], + "X": [ + { "item": "supplies_farming", "chance": 50 }, + { "item": "cleaning", "chance": 50 }, + { "item": "chem_home", "chance": 50 } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "room_9x9_weed_S", + "//": "an grow area for various recreations", + "object": { + "mapgensize": [ 9, 9 ], + "rotation": [ 0, 3 ], + "rows": [ + "|||||||||", + "|RRR UUU|", + "|Q Q|", + "|Q QQQ Q|", + "|Q hTh Q|", + "|Q hTh Q|", + "|Q Q|", + "|HWX XCA|", + "||||+||||" + ], + "terrain": { + "|": "t_wall_w", + "+": "t_door_c", + " ": "t_linoleum_gray", + "C": "t_linoleum_gray", + "X": "t_linoleum_gray", + "W": "t_linoleum_gray", + "R": "t_linoleum_gray", + "H": "t_linoleum_gray", + "h": "t_linoleum_gray", + "U": "t_linoleum_gray", + "A": "t_linoleum_gray", + "Q": "t_linoleum_gray", + "T": "t_linoleum_gray" + }, + "liquids": { "H": { "liquid": "water_clean", "amount": [ 0, 100 ] } }, + "sealed_item": { "Q": { "item": { "item": "seed_weed" }, "furniture": "f_planter_harvest" } }, + "furniture": { + "T": "f_workbench", + "h": "f_chair", + "R": "f_rack", + "A": "f_air_filter", + "C": "f_air_conditioner", + "H": "f_water_heater", + "W": "f_water_purifier", + "X": [ "f_crate_c", "f_crate_o", "f_cardboard_box" ], + "U": "f_utility_shelf" + }, + "items": { + "T": [ { "item": "supplies_farming", "chance": 70 }, { "item": "weed_farm", "chance": 50 } ], + "R": [ { "item": "weed_farm", "chance": 70 } ], + "U": [ { "item": "home_hw", "chance": 50 } ], + "X": [ + { "item": "supplies_farming", "chance": 50 }, + { "item": "cleaning", "chance": 50 }, + { "item": "chem_home", "chance": 50 } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "room_9x9_weed_E", + "//": "an grow area for various recreations", + "object": { + "mapgensize": [ 9, 9 ], + "rotation": [ 0, 3 ], + "rows": [ + "|||||||||", + "|RRR UUU|", + "|Q Q|", + "|Q QQQ Q|", + "|Q hTh +", + "|Q hTh Q|", + "|Q Q|", + "|HWX XCA|", + "|||||||||" + ], + "terrain": { + "|": "t_wall_w", + "+": "t_door_c", + " ": "t_linoleum_gray", + "C": "t_linoleum_gray", + "X": "t_linoleum_gray", + "W": "t_linoleum_gray", + "R": "t_linoleum_gray", + "H": "t_linoleum_gray", + "h": "t_linoleum_gray", + "U": "t_linoleum_gray", + "A": "t_linoleum_gray", + "Q": "t_linoleum_gray", + "T": "t_linoleum_gray" + }, + "liquids": { "H": { "liquid": "water_clean", "amount": [ 0, 100 ] } }, + "sealed_item": { "Q": { "item": { "item": "seed_weed" }, "furniture": "f_planter_harvest" } }, + "furniture": { + "T": "f_workbench", + "h": "f_chair", + "R": "f_rack", + "A": "f_air_filter", + "C": "f_air_conditioner", + "H": "f_water_heater", + "W": "f_water_purifier", + "X": [ "f_crate_c", "f_crate_o", "f_cardboard_box" ], + "U": "f_utility_shelf" + }, + "items": { + "T": [ { "item": "supplies_farming", "chance": 70 }, { "item": "weed_farm", "chance": 50 } ], + "R": [ { "item": "weed_farm", "chance": 70 } ], + "U": [ { "item": "home_hw", "chance": 50 } ], + "X": [ + { "item": "supplies_farming", "chance": 50 }, + { "item": "cleaning", "chance": 50 }, + { "item": "chem_home", "chance": 50 } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "room_9x9_weed_W", + "//": "an grow area for various recreations", + "object": { + "mapgensize": [ 9, 9 ], + "rotation": [ 0, 3 ], + "rows": [ + "|||||||||", + "|RRR UUU|", + "|Q Q|", + "|Q QQQ Q|", + "+ hTh Q|", + "|Q hTh Q|", + "|Q Q|", + "|HWX XCA|", + "|||||||||" + ], + "terrain": { + "|": "t_wall_w", + "+": "t_door_c", + " ": "t_linoleum_gray", + "C": "t_linoleum_gray", + "X": "t_linoleum_gray", + "W": "t_linoleum_gray", + "R": "t_linoleum_gray", + "H": "t_linoleum_gray", + "h": "t_linoleum_gray", + "U": "t_linoleum_gray", + "A": "t_linoleum_gray", + "Q": "t_linoleum_gray", + "T": "t_linoleum_gray" + }, + "liquids": { "H": { "liquid": "water_clean", "amount": [ 0, 100 ] } }, + "sealed_item": { "Q": { "item": { "item": "seed_weed" }, "furniture": "f_planter_harvest" } }, + "furniture": { + "T": "f_workbench", + "h": "f_chair", + "R": "f_rack", + "A": "f_air_filter", + "C": "f_air_conditioner", + "H": "f_water_heater", + "W": "f_water_purifier", + "X": [ "f_crate_c", "f_crate_o", "f_cardboard_box" ], + "U": "f_utility_shelf" + }, + "items": { + "T": [ { "item": "supplies_farming", "chance": 70 }, { "item": "weed_farm", "chance": 50 } ], + "R": [ { "item": "weed_farm", "chance": 70 } ], + "U": [ { "item": "home_hw", "chance": 50 } ], + "X": [ + { "item": "supplies_farming", "chance": 50 }, + { "item": "cleaning", "chance": 50 }, + { "item": "chem_home", "chance": 50 } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "room_9x9_recroom_N", + "//": "an entertainment area for various recreations", + "object": { + "mapgensize": [ 9, 9 ], + "rotation": [ 0, 3 ], + "rows": [ + "||||+||||", + "|HHH...=|", + "|Hl....x|", + "|%.....=|", + "|.A.A..&|", + "|JJ5JJ |", + "| |", + "|mVJ14 T|", + "|||||||||" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + ".": "t_carpet_green", + "H": "t_carpet_green", + "l": "t_carpet_green", + "A": "t_carpet_green", + "=": "t_carpet_green", + "x": "t_carpet_green", + "%": "t_carpet_green", + "&": "t_carpet_green" + }, + "furniture": { "%": "f_arcade_machine", "=": "f_speaker_cabinet", "&": "f_pinball_machine" }, + "place_loot": [ { "item": "stereo", "x": 7, "y": 2, "chance": 100 }, { "item": "laptop", "x": 5, "y": 5, "chance": 60 } ] + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "room_9x9_recroom_N", + "//": "an entertainment area for various recreations", + "object": { + "mapgensize": [ 9, 9 ], + "rotation": [ 0, 3 ], + "rows": [ + "||||+||||", + "|A.....=|", + "|..ee..x|", + "|A.ee..=|", + "|..ee..&|", + "|......%|", + "|Hll.E..|", + "|HHHHsyT|", + "|||||||||" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + ".": "t_carpet_green", + "H": "t_carpet_green", + "l": "t_carpet_green", + "A": "t_carpet_green", + "=": "t_carpet_green", + "x": "t_carpet_green", + "%": "t_carpet_green", + "E": "t_carpet_green", + "T": "t_carpet_green", + "y": "t_carpet_green", + "s": "t_carpet_green", + "e": "t_carpet_green", + "&": "t_carpet_green" + }, + "furniture": { "%": "f_arcade_machine", "=": "f_speaker_cabinet", "&": "f_pinball_machine" }, + "place_loot": [ { "item": "stereo", "x": 7, "y": 2, "chance": 100 }, { "item": "laptop", "x": 5, "y": 5, "chance": 60 } ] + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "room_9x9_recroom_S", + "//": "an entertainment area for various recreations", + "object": { + "mapgensize": [ 9, 9 ], + "rotation": [ 0, 3 ], + "rows": [ + "|||||||||", + "|HHH...=|", + "|Hl....x|", + "|%.....=|", + "|.A.A..&|", + "|JJ5JJ |", + "| |", + "|mVJ14 T|", + "||||||+||" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + ".": "t_carpet_green", + "H": "t_carpet_green", + "l": "t_carpet_green", + "A": "t_carpet_green", + "=": "t_carpet_green", + "x": "t_carpet_green", + "%": "t_carpet_green", + "&": "t_carpet_green" + }, + "furniture": { "%": "f_arcade_machine", "=": "f_speaker_cabinet", "&": "f_pinball_machine" }, + "place_loot": [ { "item": "stereo", "x": 7, "y": 2, "chance": 100 }, { "item": "laptop", "x": 5, "y": 5, "chance": 60 } ] + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "room_9x9_recroom_S", + "//": "an entertainment area for various recreations", + "object": { + "mapgensize": [ 9, 9 ], + "rotation": [ 0, 3 ], + "rows": [ + "|||||||||", + "|A.....=|", + "|..ee..x|", + "|A.ee..=|", + "|..ee..&|", + "|......%|", + "|Hll.E..|", + "|HHHHs.T|", + "||||||+||" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + ".": "t_floor", + "H": "t_floor", + "l": "t_floor", + "A": "t_floor", + "=": "t_floor", + "x": "t_floor", + "%": "t_floor", + "E": "t_floor", + "T": "t_floor", + "y": "t_floor", + "s": "t_floor", + "e": "t_floor", + "&": "t_floor" + }, + "furniture": { "%": "f_arcade_machine", "=": "f_speaker_cabinet", "&": "f_pinball_machine" }, + "place_loot": [ { "item": "stereo", "x": 7, "y": 2, "chance": 100 }, { "item": "laptop", "x": 5, "y": 5, "chance": 60 } ] + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "room_9x9_recroom_E", + "//": "an entertainment area for various recreations", + "object": { + "mapgensize": [ 9, 9 ], + "rotation": [ 0, 3 ], + "rows": [ + "|||||||||", + "|HHH...=|", + "|Hl....x|", + "|%.....=|", + "|.A.A..&|", + "|JJ5JJ +", + "| |", + "|mVJ14 T|", + "|||||||||" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + ".": "t_carpet_green", + "H": "t_carpet_green", + "l": "t_carpet_green", + "A": "t_carpet_green", + "=": "t_carpet_green", + "x": "t_carpet_green", + "%": "t_carpet_green", + "&": "t_carpet_green" + }, + "furniture": { "%": "f_arcade_machine", "=": "f_speaker_cabinet", "&": "f_pinball_machine" }, + "place_loot": [ { "item": "stereo", "x": 7, "y": 2, "chance": 100 }, { "item": "laptop", "x": 5, "y": 5, "chance": 60 } ] + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "room_9x9_recroom_E", + "//": "an entertainment area for various recreations", + "object": { + "mapgensize": [ 9, 9 ], + "rotation": [ 0, 3 ], + "rows": [ + "|||||||||", + "|A.....=|", + "|..ee..x|", + "|A.ee..=|", + "|..ee..&|", + "|.......+", + "|Hll.E.%|", + "|HHHHsyT|", + "|||||||||" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + ".": "t_carpet_red", + "H": "t_carpet_red", + "l": "t_carpet_red", + "A": "t_carpet_red", + "=": "t_carpet_red", + "x": "t_carpet_red", + "%": "t_carpet_red", + "E": "t_carpet_red", + "T": "t_carpet_red", + "y": "t_carpet_red", + "s": "t_carpet_red", + "e": "t_carpet_red", + "&": "t_carpet_red" + }, + "furniture": { "%": "f_arcade_machine", "=": "f_speaker_cabinet", "&": "f_pinball_machine" }, + "place_loot": [ { "item": "stereo", "x": 7, "y": 2, "chance": 100 }, { "item": "laptop", "x": 5, "y": 5, "chance": 60 } ] + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "room_9x9_recroom_W", + "//": "an entertainment area for various recreations", + "object": { + "mapgensize": [ 9, 9 ], + "rotation": [ 0, 3 ], + "rows": [ + "|||||||||", + "|HHH...=|", + "|Hl....x|", + "|%.....=|", + "+.A.A..&|", + "|JJ5JJ |", + "| |", + "|mVJ14 T|", + "|||||||||" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + ".": "t_carpet_green", + "H": "t_carpet_green", + "l": "t_carpet_green", + "A": "t_carpet_green", + "=": "t_carpet_green", + "x": "t_carpet_green", + "%": "t_carpet_green", + "&": "t_carpet_green" + }, + "furniture": { "%": "f_arcade_machine", "=": "f_speaker_cabinet", "&": "f_pinball_machine" }, + "place_loot": [ { "item": "stereo", "x": 7, "y": 2, "chance": 100 }, { "item": "laptop", "x": 5, "y": 5, "chance": 60 } ] + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "room_9x9_recroom_W", + "//": "an entertainment area for various recreations", + "object": { + "mapgensize": [ 9, 9 ], + "rotation": [ 0, 3 ], + "rows": [ + "|||||||||", + "|A.....=|", + "|..ee..x|", + "|A.ee..=|", + "+..ee..&|", + "|......%|", + "|Hll.E..|", + "|HHHHsyT|", + "|||||||||" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + ".": "t_carpet_green", + "H": "t_carpet_green", + "l": "t_carpet_green", + "A": "t_carpet_green", + "=": "t_carpet_green", + "x": "t_carpet_green", + "%": "t_carpet_green", + "E": "t_carpet_green", + "T": "t_carpet_green", + "y": "t_carpet_green", + "s": "t_carpet_green", + "e": "t_carpet_green", + "&": "t_carpet_green" + }, + "furniture": { "%": "f_arcade_machine", "=": "f_speaker_cabinet", "&": "f_pinball_machine" }, + "place_loot": [ { "item": "stereo", "x": 7, "y": 2, "chance": 100 }, { "item": "laptop", "x": 5, "y": 5, "chance": 60 } ] + } + }, + { + "type": "mapgen", + "method": "json", + "//": "a nested map for basements", + "nested_mapgen_id": "room_9x9_cellar_E", + "object": { + "mapgensize": [ 9, 9 ], + "rotation": [ 0, 3 ], + "rows": [ + "#########", + "#aaaaaaa#", + "#c..A..b#", + "#c.....b#", + "#c.HXW..+", + "#c.....f#", + "#c.e.r.f#", + "#eeerrrr#", + "#########" + ], + "terrain": { "+": "t_door_locked", "#": "t_wall_w", ".": "t_thconc_floor" }, + "furniture": { + "a": "f_rack_wood", + "A": "f_stool", + "r": "f_rack_wood", + "c": "f_rack_wood", + "e": "f_rack_wood", + "f": "f_table", + "H": "f_fvat_empty", + "b": "f_sofa", + "X": "f_wood_keg", + "W": "f_wood_keg" + }, + "liquids": { "X": { "liquid": "hb_beer", "amount": [ 100, 1000 ] }, "W": { "liquid": "dandelion_wine", "amount": [ 100, 1000 ] } }, + "items": { + "a": { "item": "dry_goods", "chance": 50, "repeat": [ 2, 8 ] }, + "r": { "item": "preserved_food", "chance": 50, "repeat": [ 2, 8 ] }, + "c": { "item": "condiments", "chance": 50, "repeat": [ 2, 8 ] }, + "e": { "item": "pantry_liquids", "chance": 50, "repeat": [ 2, 8 ] } + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "a nested map for basements", + "nested_mapgen_id": "room_9x9_cellar_W", + "object": { + "mapgensize": [ 9, 9 ], + "rotation": [ 0, 3 ], + "rows": [ + "#########", + "#aaaaaaa#", + "#b.A...c#", + "#b..H..c#", + "+...X..c#", + "#f..W..c#", + "#f.....c#", + "#eeerrrr#", + "#########" + ], + "terrain": { "+": "t_door_locked", "#": "t_wall_w", ".": "t_thconc_floor" }, + "furniture": { + "a": "f_rack_wood", + "A": "f_stool", + "r": "f_rack_wood", + "c": "f_rack_wood", + "e": "f_rack_wood", + "f": "f_table", + "H": "f_fvat_empty", + "b": "f_sofa", + "X": "f_wood_keg", + "W": "f_wood_keg" + }, + "liquids": { "X": { "liquid": "hb_beer", "amount": [ 100, 1000 ] }, "W": { "liquid": "dandelion_wine", "amount": [ 100, 1000 ] } }, + "items": { + "a": { "item": "dry_goods", "chance": 50, "repeat": [ 2, 8 ] }, + "r": { "item": "preserved_food", "chance": 50, "repeat": [ 2, 8 ] }, + "c": { "item": "SUS_pantry", "chance": 50, "repeat": [ 2, 8 ] }, + "e": { "item": "pantry_liquids", "chance": 50, "repeat": [ 2, 8 ] } + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "a nested map for basements", + "nested_mapgen_id": "room_9x9_cellar_S", + "object": { + "mapgensize": [ 9, 9 ], + "rotation": [ 0, 3 ], + "rows": [ + "#########", + "#aaaaaaa#", + "#b.A...c#", + "#b..f..c#", + "#W..f..c#", + "#X..f..c#", + "#H...h.c#", + "#eee.rrr#", + "####+####" + ], + "terrain": { "+": "t_door_locked", "#": "t_wall_w", ".": "t_thconc_floor" }, + "furniture": { + "a": "f_rack_wood", + "A": "f_stool", + "r": "f_rack_wood", + "c": "f_rack_wood", + "e": "f_rack_wood", + "f": "f_table", + "h": "f_chair", + "H": "f_fvat_empty", + "b": "f_sofa", + "X": "f_wood_keg", + "W": "f_wood_keg" + }, + "liquids": { "X": { "liquid": "hb_beer", "amount": [ 100, 1000 ] }, "W": { "liquid": "dandelion_wine", "amount": [ 100, 1000 ] } }, + "items": { + "a": { "item": "dry_goods", "chance": 50, "repeat": [ 2, 8 ] }, + "r": { "item": "preserved_food", "chance": 50, "repeat": [ 2, 8 ] }, + "c": { "item": "SUS_pantry", "chance": 50, "repeat": [ 2, 8 ] }, + "e": { "item": "pantry_liquids", "chance": 50, "repeat": [ 2, 8 ] } + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "a nested map for basements", + "nested_mapgen_id": "room_9x9_cellar_N", + "object": { + "mapgensize": [ 9, 9 ], + "rotation": [ 0, 3 ], + "rows": [ + "####+####", + "#aaa.aaa#", + "#b.A...c#", + "#b..f..c#", + "#H..f..c#", + "#X..fA.c#", + "#W.....c#", + "#eeerrrr#", + "#########" + ], + "terrain": { "+": "t_door_locked", "#": "t_wall_w", ".": "t_thconc_floor" }, + "furniture": { + "a": "f_rack_wood", + "A": "f_stool", + "r": "f_rack_wood", + "c": "f_rack_wood", + "e": "f_rack_wood", + "f": "f_table", + "H": "f_fvat_empty", + "b": "f_sofa", + "X": "f_wood_keg", + "W": "f_wood_keg" + }, + "liquids": { "X": { "liquid": "vinegar", "amount": [ 100, 1000 ] }, "W": { "liquid": "burdock_wine", "amount": [ 100, 1000 ] } }, + "items": { + "a": { "item": "dry_goods", "chance": 50, "repeat": [ 2, 8 ] }, + "r": { "item": "preserved_food", "chance": 50, "repeat": [ 2, 8 ] }, + "c": { "item": "SUS_pantry", "chance": 50, "repeat": [ 2, 8 ] }, + "e": { "item": "pantry_liquids", "chance": 50, "repeat": [ 2, 8 ] } + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "a nested map for basements", + "nested_mapgen_id": "room_6x6_office_E", + "object": { + "mapgensize": [ 6, 6 ], + "rotation": [ 0, 3 ], + "rows": [ + "||||||", + "|PPTE|", + "|r +", + "|rh y:", + "|rrYR|", + "||||||" + ], + "palettes": [ "standard_domestic_palette" ] + } + }, + { + "type": "mapgen", + "method": "json", + "//": "a nested map for basements", + "nested_mapgen_id": "room_6x6_office_W", + "object": { + "mapgensize": [ 6, 6 ], + "rotation": [ 0, 3 ], + "rows": [ + "||||||", + "|PPTE|", + "+ |", + ":rh Y|", + "|rrrR|", + "||||||" + ], + "palettes": [ "standard_domestic_palette" ] + } + }, + { + "type": "mapgen", + "method": "json", + "//": "a nested map for basements", + "nested_mapgen_id": "room_6x6_brewer_W", + "object": { + "mapgensize": [ 6, 6 ], + "rotation": [ 0, 3 ], + "rows": [ + "||||||", + "|THHs|", + "+ |", + "| $|", + "|%%0!|", + "||||||" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { "|": "t_wall_wood" }, + "furniture": { "%": "f_rack_wood", "$": "f_fvat_empty", "0": "f_wood_keg", "!": "f_wood_keg" }, + "liquids": { "X": { "liquid": "hb_beer", "amount": [ 100, 1000 ] }, "W": { "liquid": "dandelion_wine", "amount": [ 100, 1000 ] } }, + "items": { + "%": [ + { "item": "liqstore_brew", "chance": 50, "repeat": [ 2, 8 ] }, + { "item": "misc_alcohol", "chance": 100, "repeat": [ 2, 8 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "a nested map for basements", + "nested_mapgen_id": "room_6x6_brewer_E", + "object": { + "mapgensize": [ 6, 6 ], + "rotation": [ 0, 3 ], + "rows": [ + "||||||", + "|THHs|", + "| +", + "| A $|", + "|%%0!|", + "||||||" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { "|": "t_wall_wood" }, + "furniture": { "%": "f_rack_wood", "$": "f_fvat_empty", "0": "f_wood_keg", "!": "f_wood_keg" }, + "liquids": { "0": { "liquid": "hb_beer", "amount": [ 10, 1000 ] }, "!": { "liquid": "dandelion_wine", "amount": [ 10, 1000 ] } }, + "items": { + "%": [ + { "item": "liqstore_brew", "chance": 50, "repeat": [ 2, 8 ] }, + { "item": "misc_alcohol", "chance": 100, "repeat": [ 2, 8 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "a nested map for basements", + "nested_mapgen_id": "room_6x6_brewer_N", + "object": { + "mapgensize": [ 6, 6 ], + "rotation": [ 0, 3 ], + "rows": [ + "|||+||", + "|% 0|", + "|% $|", + "|E !|", + "|~,ss|", + "||||||" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { "|": "t_wall_wood" }, + "furniture": { "%": "f_rack_wood", "$": "f_fvat_empty", "0": "f_wood_keg", ",": "f_still", "~": "f_ash", "!": "f_wood_keg" }, + "liquids": { "0": { "liquid": "moonshine", "amount": [ 100, 1000 ] }, "!": { "liquid": "mead", "amount": [ 100, 1000 ] } }, + "items": { + "%": [ + { "item": "liqstore_brew", "chance": 50, "repeat": [ 2, 8 ] }, + { "item": "misc_alcohol", "chance": 50, "repeat": [ 2, 8 ] } + ] + }, + "place_items": [ + { "chance": 75, "item": "moonshine_brew", "x": 1, "y": 1 }, + { "chance": 75, "item": "moonshine_brew", "x": 1, "y": 1 }, + { "chance": 55, "item": "honey_bottled", "x": 1, "y": 1 }, + { "chance": 75, "item": "bottle_glass", "x": [ 3, 4 ], "y": 4, "repeat": [ 3, 24 ] }, + { "chance": 55, "item": "winemaking_beginner", "x": 1, "y": 2 }, + { "chance": 55, "item": "brewing_cookbook", "x": 1, "y": 2 } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "//": "a nested map for basements", + "nested_mapgen_id": "room_6x6_brewer_S", + "object": { + "mapgensize": [ 6, 6 ], + "rotation": [ 0, 3 ], + "rows": [ + "||||||", + "|%~,s|", + "|% s|", + "|E !|", + "| 0$|", + "||+|||" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { "|": "t_wall_wood" }, + "furniture": { "%": "f_rack_wood", "$": "f_fvat_empty", "0": "f_wood_keg", ",": "f_still", "~": "f_ash", "!": "f_wood_keg" }, + "liquids": { "0": { "liquid": "moonshine", "amount": [ 100, 1000 ] }, "!": { "liquid": "mead", "amount": [ 100, 1000 ] } }, + "items": { + "%": [ + { "item": "liqstore_brew", "chance": 50, "repeat": [ 2, 8 ] }, + { "item": "misc_alcohol", "chance": 50, "repeat": [ 2, 8 ] } + ] + }, + "place_items": [ + { "chance": 75, "item": "moonshine_brew", "x": 1, "y": 1 }, + { "chance": 75, "item": "moonshine_brew", "x": 1, "y": 1 }, + { "chance": 55, "item": "honey_bottled", "x": 1, "y": 1 }, + { "chance": 75, "item": "bottle_glass", "x": [ 3, 4 ], "y": 4, "repeat": [ 3, 24 ] }, + { "chance": 55, "item": "winemaking_beginner", "x": 1, "y": 2 }, + { "chance": 55, "item": "brewing_cookbook", "x": 1, "y": 2 } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "//": "a nested map for basements", + "nested_mapgen_id": "room_6x6_guns_N", + "object": { + "mapgensize": [ 6, 6 ], + "rotation": [ 0, 3 ], + "rows": [ + "|||+||", + "|% !|", + "|, ~|", + "|= h~|", + "|$Y ~|", + "||||||" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + "|": "t_wall_b", + " ": "t_carpet_green", + "%": "t_carpet_green", + "$": "t_carpet_green", + "=": "t_carpet_green", + ",": "t_carpet_green", + "~": "t_carpet_green", + "Y": "t_carpet_green", + "h": "t_carpet_green", + "P": "t_carpet_green", + "!": "t_carpet_green" + }, + "furniture": { + "%": "f_glass_cabinet", + "$": "f_glass_cabinet", + "0": "f_displaycase", + "=": "f_displaycase", + ",": "f_displaycase", + "~": "f_workbench", + "!": "f_bookcase" + }, + "items": { + "%": [ + { "item": "guns_rifle_common", "chance": 60, "ammo": 100, "magazine": 100, "repeat": [ 1, 2 ] }, + { "item": "guns_rifle_rare", "chance": 30, "ammo": 100, "magazine": 100, "repeat": [ 1, 2 ] }, + { "item": "guns_pistol_common", "chance": 70, "ammo": 100, "magazine": 100, "repeat": [ 1, 2 ] }, + { "item": "guns_pistol_rare", "chance": 30, "ammo": 100, "magazine": 100, "repeat": [ 1, 2 ] } + ], + "$": [ + { "item": "guns_smg_rare", "chance": 30, "magazine": 100, "repeat": [ 1, 2 ] }, + { "item": "guns_smg_common", "chance": 50, "magazine": 100, "repeat": [ 1, 2 ] }, + { "item": "guns_shotgun_common", "chance": 30, "magazine": 100, "repeat": [ 1, 2 ] }, + { "item": "guns_shotgun_rare_static", "chance": 20, "magazine": 100, "repeat": [ 1, 2 ] }, + { "item": "guns_obscure", "chance": 20, "ammo": 100, "magazine": 100, "repeat": [ 1, 2 ] } + ], + ",": [ + { "item": "mags_pistol_rare", "chance": 40, "repeat": [ 1, 2 ] }, + { "item": "mags_pistol_common", "chance": 60, "repeat": [ 1, 2 ] }, + { "item": "mags_smg_common", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "mags_rifle_common", "chance": 40, "repeat": [ 1, 2 ] }, + { "item": "mags_pistol_rare", "chance": 20, "repeat": [ 1, 2 ] } + ], + "=": [ + { "item": "ammo_rifle_reloaded", "chance": 40, "repeat": [ 1, 2 ] }, + { "item": "ammo_shotgun_reloaded", "chance": 50, "repeat": [ 1, 2 ] }, + { "item": "ammo_rifle_reloaded", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "ammo_shotgun_common", "chance": 50, "repeat": [ 1, 2 ] }, + { "item": "ammo_rifle_reloaded", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "ammo_rifle_common", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "ammo_smg_common", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "ammo_pistol_common", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "ammo_rifle_common", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "ammo_pistol_reloaded", "chance": 60, "repeat": [ 1, 2 ] } + ], + "~": [ + { "item": "museum_guns", "chance": 10 }, + { "item": "tools_common", "chance": 60 }, + { "item": "gunmod_rare", "chance": 10, "repeat": [ 1, 2 ] }, + { "item": "gunmod_common", "chance": 20, "repeat": [ 1, 2 ] } + ], + "!": [ { "item": "book_gunref", "chance": 40, "repeat": [ 1, 2 ] } ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "a nested map for basements", + "nested_mapgen_id": "room_6x6_guns_S", + "object": { + "mapgensize": [ 6, 6 ], + "rotation": [ 0, 3 ], + "rows": [ + "||||||", + "|%Y !|", + "|, ~|", + "|= h~|", + "|$ ~|", + "|||+||" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + "|": "t_wall_wood", + " ": "t_carpet_red", + "%": "t_carpet_red", + "$": "t_carpet_red", + "=": "t_carpet_red", + ",": "t_carpet_red", + "~": "t_carpet_red", + "Y": "t_carpet_red", + "h": "t_carpet_red", + "P": "t_carpet_red", + "!": "t_carpet_red" + }, + "furniture": { "%": "f_rack_wood", "$": "f_rack_wood", "=": "f_table", ",": "f_table", "~": "f_workbench", "!": "f_bookcase" }, + "items": { + "%": [ + { "item": "guns_rifle_common", "chance": 60, "magazine": 100, "repeat": [ 1, 2 ] }, + { "item": "guns_rifle_rare", "chance": 30, "magazine": 100, "repeat": [ 1, 2 ] }, + { "item": "guns_pistol_common", "chance": 50, "magazine": 100, "repeat": [ 1, 2 ] }, + { "item": "guns_pistol_rare", "chance": 30, "magazine": 100, "repeat": [ 1, 2 ] } + ], + "$": [ + { "item": "guns_smg_rare", "chance": 30, "magazine": 100, "repeat": [ 1, 2 ] }, + { "item": "guns_smg_common", "chance": 50, "magazine": 100, "repeat": [ 1, 2 ] }, + { "item": "guns_shotgun_common", "chance": 30, "magazine": 100, "repeat": [ 1, 2 ] }, + { "item": "guns_shotgun_rare_static", "chance": 30, "magazine": 100, "repeat": [ 1, 2 ] }, + { "item": "guns_obscure", "chance": 20, "ammo": 100, "magazine": 100, "repeat": [ 1, 2 ] } + ], + ",": [ + { "item": "mags_pistol_rare", "chance": 40, "repeat": [ 1, 2 ] }, + { "item": "mags_pistol_common", "chance": 60, "repeat": [ 1, 2 ] }, + { "item": "mags_smg_common", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "mags_rifle_common", "chance": 40, "repeat": [ 1, 2 ] }, + { "item": "mags_pistol_rare", "chance": 20, "repeat": [ 1, 2 ] } + ], + "=": [ + { "item": "ammo_rifle_reloaded", "chance": 40, "repeat": [ 1, 2 ] }, + { "item": "ammo_shotgun_reloaded", "chance": 50, "repeat": [ 1, 2 ] }, + { "item": "ammo_rifle_reloaded", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "ammo_shotgun_common", "chance": 50, "repeat": [ 1, 2 ] }, + { "item": "ammo_rifle_reloaded", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "ammo_rifle_common", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "ammo_smg_common", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "ammo_pistol_common", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "ammo_rifle_common", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "ammo_pistol_reloaded", "chance": 60, "repeat": [ 1, 2 ] } + ], + "~": [ + { "item": "museum_guns", "chance": 10 }, + { "item": "tools_common", "chance": 60 }, + { "item": "gunmod_rare", "chance": 10, "repeat": [ 1, 2 ] }, + { "item": "gunmod_common", "chance": 20, "repeat": [ 1, 2 ] } + ], + "!": [ { "item": "book_gunref", "chance": 40, "repeat": [ 1, 2 ] } ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "a nested map for basements", + "nested_mapgen_id": "room_6x6_guns_E", + "object": { + "mapgensize": [ 6, 6 ], + "rotation": [ 0, 3 ], + "rows": [ + "||||||", + "|% P!|", + "|, +", + "|= h~:", + "|$Y ~:", + "||||||" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + "|": "t_wall_b", + " ": "t_carpet_yellow", + "%": "t_carpet_yellow", + "$": "t_carpet_yellow", + "=": "t_carpet_yellow", + ",": "t_carpet_yellow", + "~": "t_carpet_yellow", + "Y": "t_carpet_yellow", + "h": "t_carpet_yellow", + "P": "t_carpet_yellow", + "!": "t_carpet_yellow" + }, + "furniture": { "%": "f_rack_wood", "$": "f_rack_wood", "=": "f_table", ",": "f_table", "~": "f_workbench", "!": "f_bookcase" }, + "items": { + "%": [ + { "item": "guns_rifle_common", "chance": 60, "magazine": 100, "repeat": [ 1, 2 ] }, + { "item": "guns_rifle_rare", "chance": 30, "magazine": 100, "repeat": [ 1, 2 ] }, + { "item": "guns_pistol_common", "chance": 50, "magazine": 100, "repeat": [ 1, 2 ] }, + { "item": "guns_pistol_rare", "chance": 30, "magazine": 100, "repeat": [ 1, 2 ] } + ], + "$": [ + { "item": "guns_smg_rare", "chance": 30, "magazine": 100, "repeat": [ 1, 2 ] }, + { "item": "guns_smg_common", "chance": 50, "magazine": 100, "repeat": [ 1, 2 ] }, + { "item": "guns_shotgun_common", "chance": 30, "magazine": 100, "repeat": [ 1, 2 ] }, + { "item": "guns_shotgun_rare_static", "chance": 30, "magazine": 100, "repeat": [ 1, 2 ] }, + { "item": "guns_obscure", "chance": 20, "ammo": 100, "magazine": 100, "repeat": [ 1, 2 ] } + ], + ",": [ + { "item": "mags_pistol_rare", "chance": 40, "repeat": [ 1, 2 ] }, + { "item": "mags_pistol_common", "chance": 60, "repeat": [ 1, 2 ] }, + { "item": "mags_smg_common", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "mags_rifle_common", "chance": 40, "repeat": [ 1, 2 ] }, + { "item": "mags_pistol_rare", "chance": 20, "repeat": [ 1, 2 ] } + ], + "=": [ + { "item": "ammo_rifle_reloaded", "chance": 40, "repeat": [ 1, 2 ] }, + { "item": "ammo_shotgun_reloaded", "chance": 50, "repeat": [ 1, 2 ] }, + { "item": "ammo_rifle_reloaded", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "ammo_shotgun_common", "chance": 50, "repeat": [ 1, 2 ] }, + { "item": "ammo_rifle_reloaded", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "ammo_rifle_common", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "ammo_smg_common", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "ammo_pistol_common", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "ammo_rifle_common", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "ammo_pistol_reloaded", "chance": 60, "repeat": [ 1, 2 ] } + ], + "~": [ + { "item": "museum_guns", "chance": 10 }, + { "item": "tools_common", "chance": 60 }, + { "item": "gunmod_rare", "chance": 10, "repeat": [ 1, 2 ] }, + { "item": "gunmod_common", "chance": 20, "repeat": [ 1, 2 ] } + ], + "!": [ { "item": "book_gunref", "chance": 60, "repeat": [ 1, 2 ] } ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "a nested map for basements", + "nested_mapgen_id": "room_6x6_guns_W", + "object": { + "mapgensize": [ 6, 6 ], + "rotation": [ 0, 3 ], + "rows": [ + "||||||", + "|%,=!|", + "+ ~|", + "|Y h~|", + "|$ ~|", + "||||||" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + " ": "t_floor", + "%": "t_floor", + "$": "t_floor", + "=": "t_floor", + ",": "t_floor", + "~": "t_floor", + "Y": "t_floor", + "h": "t_floor", + "P": "t_floor", + "!": "t_floor" + }, + "furniture": { + "%": "f_glass_cabinet", + "$": "f_glass_cabinet", + "=": "f_table", + ",": "f_table", + "~": "f_workbench", + "!": "f_bookcase" + }, + "items": { + "%": [ + { "item": "guns_rifle_common", "chance": 60, "magazine": 100, "repeat": [ 1, 2 ] }, + { "item": "guns_rifle_rare", "chance": 30, "magazine": 100, "repeat": [ 1, 2 ] }, + { "item": "guns_pistol_common", "chance": 50, "magazine": 100, "repeat": [ 1, 2 ] }, + { "item": "guns_pistol_rare", "chance": 30, "magazine": 100, "repeat": [ 1, 2 ] } + ], + "$": [ + { "item": "guns_smg_rare", "chance": 30, "magazine": 100, "repeat": [ 1, 2 ] }, + { "item": "guns_smg_common", "chance": 50, "magazine": 100, "repeat": [ 1, 2 ] }, + { "item": "guns_shotgun_common", "chance": 30, "magazine": 100, "repeat": [ 1, 2 ] }, + { "item": "guns_shotgun_rare_static", "chance": 30, "magazine": 100, "repeat": [ 1, 2 ] }, + { "item": "guns_obscure", "chance": 20, "ammo": 100, "magazine": 100, "repeat": [ 1, 2 ] } + ], + ",": [ + { "item": "mags_pistol_rare", "chance": 40, "repeat": [ 1, 2 ] }, + { "item": "mags_pistol_common", "chance": 60, "repeat": [ 1, 2 ] }, + { "item": "mags_smg_common", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "mags_rifle_common", "chance": 40, "repeat": [ 1, 2 ] }, + { "item": "mags_pistol_rare", "chance": 20, "repeat": [ 1, 2 ] } + ], + "=": [ + { "item": "ammo_rifle_reloaded", "chance": 40, "repeat": [ 1, 2 ] }, + { "item": "ammo_shotgun_reloaded", "chance": 50, "repeat": [ 1, 2 ] }, + { "item": "ammo_rifle_reloaded", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "ammo_shotgun_common", "chance": 50, "repeat": [ 1, 2 ] }, + { "item": "ammo_rifle_reloaded", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "ammo_rifle_common", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "ammo_smg_common", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "ammo_pistol_common", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "ammo_rifle_common", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "ammo_pistol_reloaded", "chance": 60, "repeat": [ 1, 2 ] } + ], + "~": [ + { "item": "museum_guns", "chance": 10 }, + { "item": "tools_common", "chance": 60 }, + { "item": "gunmod_rare", "chance": 10, "repeat": [ 1, 2 ] }, + { "item": "gunmod_common", "chance": 20, "repeat": [ 1, 2 ] } + ], + "!": [ { "item": "book_gunref", "chance": 60, "repeat": [ 1, 2 ] } ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "7x7_tent_indoors", + "//": "a tent for basements, indoor scenarios", + "object": { + "mapgensize": [ 7, 7 ], + "rotation": [ 0, 3 ], + "rows": [ + " K ", + " G %%% ", + " &=% ", + " %%% ", + " G ", + " 0 G ", + " K " + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + " ": "t_carpet_green", + "K": "t_carpet_green", + "G": "t_carpet_green", + "%": "t_carpet_green", + "=": "t_carpet_green", + "&": "t_carpet_green", + "0": "t_carpet_green" + }, + "furniture": { "%": "f_canvas_wall", "=": "f_groundsheet", "&": "f_canvas_door", "0": "f_brazier" }, + "place_items": [ + { "item": "snacks", "x": 5, "y": 6, "chance": 75 }, + { "item": "snacks", "x": 2, "y": 0, "chance": 75 }, + { "item": "camping", "x": 4, "y": 2, "chance": 30, "repeat": [ 1, 3 ] }, + { "item": "stash_wood", "x": 4, "y": 4, "chance": 100, "repeat": [ 6, 10 ] } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "room_7x7_recroom_N", + "//": "an entertainment area for various recreations", + "object": { + "mapgensize": [ 7, 7 ], + "rotation": [ 0, 3 ], + "rows": [ + "|||+|||", + "|y =|", + "|H x|", + "|H x|", + "| h =|", + "|Trr %|", + "|||||||" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + " ": "t_carpet_green", + "y": "t_carpet_green", + "H": "t_carpet_green", + "h": "t_carpet_green", + "r": "t_carpet_green", + "%": "t_carpet_green", + "T": "t_carpet_green", + "=": "t_carpet_green", + "R": "t_carpet_green", + "x": "t_carpet_green" + }, + "furniture": { "%": [ "f_floor_canvas", "f_arcade_machine", "f_pinball_machine" ], "=": "f_speaker_cabinet" }, + "place_loot": [ + { "item": "stereo", "x": 5, "y": 2, "chance": 100 }, + { "item": "television", "x": 5, "y": 3, "chance": 75 }, + { "item": "laptop", "x": 2, "y": 5, "chance": 100 } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "room_7x7_recroom_N", + "//": "an entertainment area for various recreations", + "object": { + "mapgensize": [ 7, 7 ], + "rotation": [ 0, 3 ], + "rows": [ + "|::!::|", + "|T =|", + "|&A x|", + "|s A x|", + "|&A A=|", + "|Y%s%y|", + "|||||||" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + "!": "t_door_glass_c", + " ": "t_carpet_purple", + "y": "t_carpet_purple", + "&": "t_carpet_purple", + "A": "t_carpet_purple", + "Y": "t_carpet_purple", + "%": "t_carpet_purple", + "T": "t_carpet_purple", + "=": "t_carpet_purple", + "x": "t_carpet_purple" + }, + "furniture": { "%": "f_arcade_machine", "=": "f_speaker_cabinet", "&": "f_pinball_machine" }, + "place_loot": [ { "item": "stereo", "x": 5, "y": 2, "chance": 100 } ] + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "room_7x7_recroom_S", + "//": "an entertainment area for various recreations", + "object": { + "mapgensize": [ 7, 7 ], + "rotation": [ 0, 3 ], + "rows": [ + "|||||||", + "|y =|", + "|H x|", + "|H x|", + "| h =|", + "|Trr %|", + "||||+||" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + " ": "t_carpet_green", + "y": "t_carpet_green", + "H": "t_carpet_green", + "h": "t_carpet_green", + "r": "t_carpet_green", + "T": "t_carpet_green", + "=": "t_carpet_green", + "%": "t_carpet_green", + "R": "t_carpet_green", + "x": "t_carpet_green" + }, + "furniture": { "%": [ "f_floor_canvas", "f_arcade_machine", "f_pinball_machine" ], "=": "f_speaker_cabinet" }, + "place_loot": [ + { "item": "stereo", "x": 5, "y": 2, "chance": 100 }, + { "item": "television", "x": 5, "y": 3, "chance": 75 }, + { "item": "laptop", "x": 2, "y": 5, "chance": 100 } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "room_7x7_recroom_S", + "//": "an entertainment area for various recreations", + "object": { + "mapgensize": [ 7, 7 ], + "rotation": [ 0, 3 ], + "rows": [ + "|||||||", + "|T%s%=|", + "|&A x|", + "|s A x|", + "|&A A=|", + "|Y y|", + "|::!::|" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + "!": "t_door_glass_c", + " ": "t_carpet_green", + "y": "t_carpet_green", + "&": "t_carpet_green", + "A": "t_carpet_green", + "Y": "t_carpet_green", + "%": "t_carpet_green", + "T": "t_carpet_green", + "=": "t_carpet_green", + "x": "t_carpet_green" + }, + "furniture": { "%": "f_arcade_machine", "=": "f_speaker_cabinet", "&": "f_pinball_machine" }, + "place_loot": [ { "item": "stereo", "x": 5, "y": 2, "chance": 100 } ] + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "room_7x7_recroom_E", + "//": "an entertainment area for various recreations", + "object": { + "mapgensize": [ 7, 7 ], + "rotation": [ 0, 3 ], + "rows": [ + "|||||||", + "|x HH|", + "|x lH|", + "|= +", + "| h Y|", + "|Trr%=|", + "|||||||" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + " ": "t_carpet_green", + "y": "t_carpet_green", + "H": "t_carpet_green", + "h": "t_carpet_green", + "r": "t_carpet_green", + "T": "t_carpet_green", + "=": "t_carpet_green", + "Y": "t_carpet_green", + "%": "t_carpet_green", + "l": "t_carpet_green", + "R": "t_carpet_green", + "x": "t_carpet_green" + }, + "furniture": { "%": [ "f_floor_canvas", "f_arcade_machine", "f_pinball_machine" ], "=": "f_speaker_cabinet" }, + "place_loot": [ + { "item": "stereo", "x": 1, "y": 1, "chance": 100 }, + { "item": "television", "x": 1, "y": 2, "chance": 75 }, + { "item": "laptop", "x": 2, "y": 5, "chance": 100 } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "room_7x7_recroom_E", + "//": "an entertainment area for various recreations", + "object": { + "mapgensize": [ 7, 7 ], + "rotation": [ 0, 3 ], + "rows": [ + "|||||||", + "|T%s%A:", + "|&A A :", + "|s !", + "|&A :", + "|Y=x=y:", + "|||||||" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + "!": "t_door_glass_c", + " ": "t_carpet_red", + "y": "t_carpet_red", + "&": "t_carpet_red", + "A": "t_carpet_red", + "Y": "t_carpet_red", + "%": "t_carpet_red", + "T": "t_carpet_red", + "=": "t_carpet_red", + "x": "t_carpet_red" + }, + "furniture": { "%": "f_arcade_machine", "=": "f_speaker_cabinet", "&": "f_pinball_machine" }, + "place_loot": [ { "item": "stereo", "x": 3, "y": 5, "chance": 100 } ] + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "room_7x7_recroom_W", + "//": "an entertainment area for various recreations", + "object": { + "mapgensize": [ 7, 7 ], + "rotation": [ 0, 3 ], + "rows": [ + "|||||||", + "|x =HH|", + "|x lH|", + "+ =|", + "| h |", + "|Trr %|", + "|||||||" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + " ": "t_carpet_green", + "y": "t_carpet_green", + "H": "t_carpet_green", + "l": "t_carpet_green", + "T": "t_carpet_green", + "=": "t_carpet_green", + "h": "t_carpet_green", + "r": "t_carpet_green", + "%": "t_carpet_green", + "R": "t_carpet_green", + "x": "t_carpet_green" + }, + "furniture": { "%": [ "f_floor_canvas", "f_arcade_machine", "f_pinball_machine" ], "=": "f_speaker_cabinet" }, + "place_loot": [ + { "item": "stereo", "x": 1, "y": 1, "chance": 100 }, + { "item": "television", "x": 1, "y": 2, "chance": 75 }, + { "item": "laptop", "x": 2, "y": 5, "chance": 100 } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "room_7x7_recroom_W", + "//": "an entertainment area for various recreations", + "object": { + "mapgensize": [ 7, 7 ], + "rotation": [ 0, 3 ], + "rows": [ + "|||||||", + ":T%s% |", + ": A A&|", + "! s|", + ": A&|", + ":Y=x=y|", + "|||||||" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + "!": "t_door_glass_c", + " ": "t_carpet_red", + "y": "t_carpet_red", + "&": "t_carpet_red", + "A": "t_carpet_red", + "Y": "t_carpet_red", + "%": "t_carpet_red", + "T": "t_carpet_red", + "=": "t_carpet_red", + "x": "t_carpet_red" + }, + "furniture": { "%": "f_arcade_machine", "=": "f_speaker_cabinet", "&": "f_pinball_machine" }, + "place_loot": [ { "item": "stereo", "x": 3, "y": 5, "chance": 100 } ] + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "5x5_holdout_N", + "object": { + "mapgensize": [ 5, 5 ], + "rows": [ + "%% %%", + "% %", + "% G%", + "%=KK%", + "%%%%%" + ], + "palettes": [ "standard_domestic_palette" ], + "furniture": { "%": "f_earthbag_wall" }, + "traps": { "=": "tr_rollmat" }, + "place_loot": [ + { "item": "sleeping_bag", "x": 1, "y": 3, "chance": 100, "repeat": [ 1, 2 ] }, + { "group": "alcohol_bottled_canned", "x": [ 2, 3 ], "y": 3, "chance": 80 }, + { "group": "stash_food", "x": [ 2, 3 ], "y": 3, "chance": 30, "repeat": [ 2, 3 ] }, + { "group": "roof_holdout", "x": [ 2, 3 ], "y": 3, "chance": 70, "repeat": [ 2, 4 ] } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "5x5_holdout_S", + "object": { + "mapgensize": [ 5, 5 ], + "rows": [ + "%%%%%", + "%GKK%", + "% %", + "%= %", + "%% %%" + ], + "palettes": [ "standard_domestic_palette" ], + "furniture": { "%": "f_earthbag_wall" }, + "traps": { "=": "tr_rollmat" }, + "place_loot": [ + { "item": "sleeping_bag", "x": 1, "y": 3, "chance": 100, "repeat": [ 1, 2 ] }, + { "group": "alcohol_bottled_canned", "x": [ 2, 3 ], "y": 1, "chance": 80 }, + { "group": "stash_food", "x": [ 2, 3 ], "y": 1, "chance": 30, "repeat": [ 2, 3 ] }, + { "group": "roof_holdout", "x": [ 2, 3 ], "y": 1, "chance": 70, "repeat": [ 2, 4 ] } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "5x5_holdout_E", + "object": { + "mapgensize": [ 5, 5 ], + "rows": [ + "%%%%%", + "%GKK%", + "% ", + "%= %", + "%%%%%" + ], + "palettes": [ "standard_domestic_palette" ], + "furniture": { "%": "f_sandbag_wall" }, + "traps": { "=": "tr_rollmat" }, + "place_loot": [ + { "item": "sleeping_bag", "x": 1, "y": 3, "chance": 100, "repeat": [ 1, 2 ] }, + { "group": "alcohol_bottled_canned", "x": [ 2, 3 ], "y": 1, "chance": 80 }, + { "group": "stash_food", "x": [ 2, 3 ], "y": 1, "chance": 30, "repeat": [ 2, 3 ] }, + { "group": "roof_holdout", "x": [ 2, 3 ], "y": 1, "chance": 70, "repeat": [ 2, 4 ] } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "5x5_holdout_W", + "object": { + "mapgensize": [ 5, 5 ], + "rows": [ + "%%%%%", + "%GKK%", + " %", + "%= %", + "%%%%%" + ], + "palettes": [ "standard_domestic_palette" ], + "furniture": { "%": "f_sandbag_wall" }, + "traps": { "=": "tr_rollmat" }, + "place_loot": [ + { "item": "sleeping_bag", "x": 1, "y": 3, "chance": 100, "repeat": [ 1, 2 ] }, + { "group": "alcohol_bottled_canned", "x": [ 2, 3 ], "y": 1, "chance": 80 }, + { "group": "stash_food", "x": [ 2, 3 ], "y": 1, "chance": 30, "repeat": [ 2, 3 ] }, + { "group": "roof_holdout", "x": [ 2, 3 ], "y": 1, "chance": 70, "repeat": [ 2, 4 ] } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "5x5_sauna_N", + "object": { + "mapgensize": [ 5, 5 ], + "rows": [ + "%%&:%", + "%i %", + "%i 0%", + "%iii%", + "%%%%%" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { "%": "t_wall_wood", "&": "t_door_glass_c", "i": "t_floor", " ": "t_floor", "0": "t_floor" }, + "furniture": { "0": "f_brazier" }, + "place_loot": [ + { "item": "towel", "x": 1, "y": [ 1, 3 ], "chance": 100, "repeat": [ 1, 2 ] }, + { "item": "charcoal", "x": 3, "y": 2, "chance": 100, "repeat": [ 3, 10 ] }, + { "item": "bucket", "x": 3, "y": 1, "chance": 100 }, + { "item": "water_clean", "x": 1, "y": 1, "chance": 80, "repeat": [ 1, 4 ] } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "5x5_sauna_S", + "object": { + "mapgensize": [ 5, 5 ], + "rows": [ + "%%%%%", + "%iii%", + "%i 0%", + "%i %", + "%%&:%" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { "%": "t_wall_wood", "&": "t_door_glass_c", "i": "t_floor", " ": "t_floor", "0": "t_floor" }, + "furniture": { "0": "f_brazier" }, + "place_loot": [ + { "item": "towel", "x": 1, "y": [ 1, 3 ], "chance": 100, "repeat": [ 1, 2 ] }, + { "item": "charcoal", "x": 3, "y": 2, "chance": 100, "repeat": [ 3, 10 ] }, + { "item": "bucket", "x": 3, "y": 3, "chance": 100 }, + { "item": "water_clean", "x": 1, "y": 1, "chance": 80, "repeat": [ 1, 4 ] } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "5x5_sauna_E", + "object": { + "mapgensize": [ 5, 5 ], + "rows": [ + "%%%%%", + "%i0 :", + "%i &", + "%iii%", + "%%%%%" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { "%": "t_wall_wood", "&": "t_door_glass_c", "i": "t_floor", " ": "t_floor", "0": "t_floor" }, + "furniture": { "0": "f_brazier" }, + "place_loot": [ + { "item": "towel", "x": 1, "y": [ 1, 3 ], "chance": 100, "repeat": [ 1, 2 ] }, + { "item": "charcoal", "x": 2, "y": 1, "chance": 100, "repeat": [ 3, 10 ] }, + { "item": "bucket", "x": 3, "y": 1, "chance": 100 }, + { "item": "water_clean", "x": 1, "y": 1, "chance": 80, "repeat": [ 1, 4 ] } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "5x5_sauna_W", + "object": { + "mapgensize": [ 5, 5 ], + "rows": [ + "%%%%%", + ": 0i%", + "& i%", + "%iii%", + "%%%%%" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { "%": "t_wall_wood", "&": "t_door_glass_c", "i": "t_floor", " ": "t_floor", "0": "t_floor" }, + "furniture": { "0": "f_brazier" }, + "place_loot": [ + { "item": "towel", "x": 3, "y": [ 1, 3 ], "chance": 100, "repeat": [ 1, 2 ] }, + { "item": "charcoal", "x": 2, "y": 1, "chance": 100, "repeat": [ 3, 10 ] }, + { "item": "bucket", "x": 1, "y": 1, "chance": 100 }, + { "item": "water_clean", "x": 3, "y": 1, "chance": 80, "repeat": [ 1, 4 ] } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "5x5_pool", + "object": { + "mapgensize": [ 5, 5 ], + "rows": [ + "y y", + " === ", + " === ", + " === ", + "y y" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { "=": "t_water_pool", " ": "t_floor_blue", "y": "t_floor_blue" }, + "furniture": { "y": [ "f_indoor_plant_y", "f_indoor_plant" ] }, + "place_loot": [ { "item": "towel", "x": 0, "y": [ 1, 3 ], "chance": 100, "repeat": [ 1, 2 ] } ] + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "5x5_gym_N", + "object": { + "mapgensize": [ 5, 5 ], + "rows": [ + "% ccc", + " ", + " = =", + "= = ", + "B B " + ], + "terrain": { + " ": "t_carpet_purple", + "!": "t_carpet_purple", + "@": "t_carpet_purple", + "V": "t_carpet_purple", + "B": "t_carpet_purple", + "c": "t_carpet_purple", + "%": "t_carpet_purple", + "O": "t_carpet_purple", + "=": "t_carpet_purple" + }, + "furniture": { "%": "f_floor_canvas", "c": "f_bench", "B": "f_bigmirror" }, + "traps": { "=": "tr_rollmat" } + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "5x5_gym_S", + "object": { + "mapgensize": [ 5, 5 ], + "rows": [ + "B B ", + " = ", + "= = ", + " ", + "ccc %" + ], + "terrain": { + " ": "t_carpet_green", + "!": "t_carpet_green", + "@": "t_carpet_green", + "V": "t_carpet_green", + "B": "t_carpet_green", + "c": "t_carpet_green", + "O": "t_carpet_green", + "%": "t_carpet_green", + "=": "t_carpet_green" + }, + "furniture": { "%": "f_floor_canvas", "c": "f_bench", "B": "f_bigmirror" }, + "traps": { "=": "tr_rollmat" } + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "5x5_gym_E", + "object": { + "mapgensize": [ 5, 5 ], + "rows": [ + "% ccc", + " ", + " = =", + " = ", + "B B " + ], + "terrain": { + " ": "t_carpet_yellow", + "!": "t_carpet_yellow", + "@": "t_carpet_yellow", + "V": "t_carpet_yellow", + "B": "t_carpet_yellow", + "c": "t_carpet_yellow", + "%": "t_carpet_yellow", + "O": "t_carpet_yellow", + "=": "t_carpet_yellow" + }, + "furniture": { "%": "f_floor_canvas", "c": "f_bench", "B": "f_bigmirror" }, + "traps": { "=": "tr_rollmat" } + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "5x5_gym_W", + "object": { + "mapgensize": [ 5, 5 ], + "rows": [ + "B B ", + " = ", + "= = ", + " ", + "cc %" + ], + "terrain": { + " ": "t_carpet_red", + "!": "t_carpet_red", + "@": "t_carpet_red", + "V": "t_carpet_red", + "B": "t_carpet_red", + "c": "t_carpet_red", + "O": "t_carpet_red", + "%": "t_carpet_red", + "=": "t_carpet_red" + }, + "furniture": { "%": "f_floor_canvas", "c": "f_bench", "B": "f_bigmirror" }, + "traps": { "=": "tr_rollmat" } + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "8x8_gym_N", + "object": { + "mapgensize": [ 8, 8 ], + "rows": [ + " ", + " ! @ V ", + " ", + "1 c ", + " c ", + " =", + " = ", + " B " + ], + "terrain": { + " ": "t_carpet_purple", + "!": "t_carpet_purple", + "@": "t_carpet_purple", + "V": "t_carpet_purple", + "B": "t_carpet_purple", + "c": "t_carpet_purple", + "O": "t_carpet_purple", + "=": "t_carpet_purple" + }, + "furniture": { "!": "f_ergometer", "@": "f_treadmill", "V": "f_exercise", "c": "f_bench", "B": "f_bigmirror" }, + "traps": { "=": "tr_rollmat" }, + "nested": { "1": { "chunks": [ [ "5x5_sauna_N", 50 ], [ "5x5_pool", 50 ], [ "5x5_gym_N", 250 ] ] } } + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "8x8_gym_S", + "object": { + "mapgensize": [ 8, 8 ], + "rows": [ + "B 1 ", + " =c ", + "= c ", + " ", + " ", + " ", + " ! @ V ", + " " + ], + "terrain": { + " ": "t_carpet_green", + "!": "t_carpet_green", + "@": "t_carpet_green", + "V": "t_carpet_green", + "B": "t_carpet_green", + "c": "t_carpet_green", + "O": "t_carpet_green", + "=": "t_carpet_green" + }, + "furniture": { "!": "f_ergometer", "@": "f_treadmill", "V": "f_exercise", "c": "f_bench", "B": "f_bigmirror" }, + "traps": { "=": "tr_rollmat" }, + "nested": { "1": { "chunks": [ [ "5x5_sauna_S", 50 ], [ "5x5_pool", 50 ], [ "5x5_gym_S", 250 ] ] } } + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "8x8_gym_E", + "object": { + "mapgensize": [ 8, 8 ], + "rows": [ + " ", + " ! @ V ", + " ", + "1 ", + " ", + " =", + " = ", + " B " + ], + "terrain": { + " ": "t_carpet_yellow", + "!": "t_carpet_yellow", + "@": "t_carpet_yellow", + "V": "t_carpet_yellow", + "B": "t_carpet_yellow", + "c": "t_carpet_yellow", + "O": "t_carpet_yellow", + "=": "t_carpet_yellow" + }, + "furniture": { "!": "f_ergometer", "@": "f_treadmill", "V": "f_exercise", "c": "f_bench", "B": "f_bigmirror" }, + "traps": { "=": "tr_rollmat" }, + "nested": { "1": { "chunks": [ [ "5x5_sauna_E", 50 ], [ "5x5_pool", 50 ], [ "5x5_gym_E", 250 ] ] } } + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "8x8_gym_W", + "object": { + "mapgensize": [ 8, 8 ], + "rows": [ + "B 1 ", + " = ", + "= ", + " ", + " ", + " ", + " ! @ V c", + " c" + ], + "terrain": { + " ": "t_carpet_red", + "!": "t_carpet_red", + "@": "t_carpet_red", + "V": "t_carpet_red", + "B": "t_carpet_red", + "c": "t_carpet_red", + "O": "t_carpet_red", + "=": "t_carpet_red" + }, + "furniture": { "!": "f_ergometer", "@": "f_treadmill", "V": "f_exercise", "c": "f_bench", "B": "f_bigmirror" }, + "traps": { "=": "tr_rollmat" }, + "nested": { "1": { "chunks": [ [ "5x5_sauna_W", 50 ], [ "5x5_pool", 50 ], [ "5x5_gym_W", 250 ] ] } } + } } ] diff --git a/data/json/mapgen/trailhead.json b/data/json/mapgen/trailhead.json index 633c1a63e3746..86b334b43a8e9 100644 --- a/data/json/mapgen/trailhead.json +++ b/data/json/mapgen/trailhead.json @@ -81,6 +81,45 @@ "method": "json", "om_terrain": [ "trailhead" ], "weight": 5, + "object": { + "rows": [ + ",,,,,,,,,,,,,,,,,,,,,,,,", + ",,,,,,,,,......,,,,,,,,,", + ",,,,,,,,,......,,,,,,,,,", + ",,,,,,,,,......,,,,,,,,,", + ",,,,,,,;;......,,,,,,;,,", + ";,,;,,;;;......,,;;,;;;;", + ";;;;;;;;;......;;;;;;;;;", + ";;;;;;;;.......;;;;;;;;;", + ";;;;;;;;........;;;;;;;;", + ";;;;;............;;;;;;;", + ";;;..................;;;", + ";;....................;;", + ";;;...................;;", + ";;;...................;;", + ";;;...................;;", + ";;;...................;;", + ";;;...................;;", + ";;... ..;;;", + ";;... . . . .;;;;", + ";;;.. . ;;;;;", + ";;;;. . . . ;;;;;", + ";;;;; ;;;;;", + ";;;;;tttt tttt;;;;;", + ";;7;;b..b s s b..b;;7;;" + ], + "palettes": [ "trailhead" ], + "place_vehicles": [ + { "chance": 20, "fuel": 0, "rotation": 90, "status": 1, "vehicle": "campground_vehicles", "x": 7, "y": 19 }, + { "chance": 20, "fuel": 0, "rotation": 90, "status": 1, "vehicle": "campground_vehicles", "x": 17, "y": 19 } + ], + "place_signs": [ { "signage": " Trail", "x": 10, "y": 23 }, { "snippet": "trailhead", "x": 13, "y": 23 } ] + } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": [ "trailhead_outhouse_z0" ], "object": { "rows": [ ",,,,,,,;;......,,,,,,;,,", @@ -120,48 +159,41 @@ { "type": "mapgen", "method": "json", - "om_terrain": [ "trailhead" ], - "weight": 5, + "om_terrain": "trailhead_outhouse_z1", "object": { "rows": [ - ",,,,,,,,,,,,,,,,,,,,,,,,", - ",,,,,,,,,......,,,,,,,,,", - ",,,,,,,,,......,,,,,,,,,", - ",,,,,,,,,......,,,,,,,,,", - ",,,,,,,;;......,,,,,,;,,", - ";,,;,,;;;......,,;;,;;;;", - ";;;;;;;;;......;;;;;;;;;", - ";;;;;;;;.......;;;;;;;;;", - ";;;;;;;;........;;;;;;;;", - ";;;;;............;;;;;;;", - ";;;..................;;;", - ";;....................;;", - ";;;...................;;", - ";;;...................;;", - ";;;...................;;", - ";;;...................;;", - ";;;...................;;", - ";;... ..;;;", - ";;... . . . .;;;;", - ";;;.. . ;;;;;", - ";;;;. . . . ;;;;;", - ";;;;; ;;;;;", - ";;;;;tttt tttt;;;;;", - ";;7;;b..b s s b..b;;7;;" - ], - "palettes": [ "trailhead" ], - "place_vehicles": [ - { "chance": 20, "fuel": 0, "rotation": 90, "status": 1, "vehicle": "campground_vehicles", "x": 7, "y": 19 }, - { "chance": 20, "fuel": 0, "rotation": 90, "status": 1, "vehicle": "campground_vehicles", "x": 17, "y": 19 } + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ... ", + " ... ", + " ... ", + " ... ", + " ... ", + " ", + " " ], - "place_signs": [ { "signage": " Trail", "x": 10, "y": 23 }, { "snippet": "trailhead", "x": 13, "y": 23 } ] + "terrain": { ".": "t_shingle_flat_roof", " ": "t_open_air" } } }, { "type": "mapgen", "method": "json", - "om_terrain": [ "trailhead" ], - "weight": 5, + "om_terrain": [ "trailhead_shack_z0" ], "object": { "rows": [ ",,,,,,,,,,,,,,,,,,,,,,,,", @@ -186,10 +218,11 @@ ";;;c|B###+ ..;;;;;;;b", ";;;c|BB#w|s ..;;;;;;;;", ";;;c|--:-| ;;;;;;;;;", - ";7;ccccccc ;;;;;;b;;", + ";7;cc4cccc ;;;;;;b;;", ";;;b;b;b; ;;b;;;;7;" ], "palettes": [ "trailhead" ], + "terrain": { "4": "t_gutter_downspout" }, "place_items": [ { "item": "camping", "x": [ 5, 5 ], "y": [ 18, 20 ], "chance": 70 } ], "place_signs": [ { "snippet": "trailhead", "x": 10, "y": 18 }, @@ -199,6 +232,48 @@ "place_nested": [ { "chunks": [ [ "null", 2 ], [ "trailhead_sub_graffiti_snippet", 1 ] ], "x": 5, "y": [ 18, 20 ] } ] } }, + { + "type": "mapgen", + "method": "json", + "om_terrain": "trailhead_shack_z1", + "object": { + "rows": [ + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " |22223 ", + " |....3 ", + " |....3 ", + " |....3 ", + " |5---3 ", + " ", + " " + ], + "terrain": { + ".": "t_shingle_flat_roof", + " ": "t_open_air", + "2": "t_gutter_north", + "-": "t_gutter_south", + "3": "t_gutter_east", + "|": "t_gutter_west", + "5": "t_gutter_drop" + } + } + }, { "type": "mapgen", "method": "json", diff --git a/data/json/martialarts.json b/data/json/martialarts.json index 6f64c3276d14b..e8ad9d1a73078 100644 --- a/data/json/martialarts.json +++ b/data/json/martialarts.json @@ -910,6 +910,7 @@ "l-stick", "l-stick_on", "machete", + "makeshift_machete", "makeshift_knife", "nodachi", "nodachi_inferior", diff --git a/data/json/mutations/mutations.json b/data/json/mutations/mutations.json index 4994a03663461..5e681e85d2eb5 100644 --- a/data/json/mutations/mutations.json +++ b/data/json/mutations/mutations.json @@ -1086,8 +1086,9 @@ "id": "TRIGGERHAPPY", "name": { "str": "Trigger Happy" }, "points": -1, - "description": "On rare occasion, you will go full-auto when you intended to fire a single shot. This has no effect when firing semi-automatic firearms.", - "starting_trait": true, + "description": "Unimplemented. To be removed after 0.F. to preserve save compatibility.", + "starting_trait": false, + "player_display": false, "valid": false }, { diff --git a/data/json/npcs/refugee_center/beggars/BEGGAR_4_Brandon_Garder.json b/data/json/npcs/refugee_center/beggars/BEGGAR_4_Brandon_Garder.json index a82354bc6f4f1..09fd15c7c0a99 100644 --- a/data/json/npcs/refugee_center/beggars/BEGGAR_4_Brandon_Garder.json +++ b/data/json/npcs/refugee_center/beggars/BEGGAR_4_Brandon_Garder.json @@ -37,7 +37,6 @@ { "trait": "MYOPIC" }, { "trait": "HYPEROPIC" }, { "trait": "JITTERY" }, - { "trait": "TRIGGERHAPPY" }, { "trait": "SMELLY" }, { "trait": "PROJUNK" }, { "trait": "BADBACK" }, diff --git a/data/json/npcs/starting_traits.json b/data/json/npcs/starting_traits.json index 240dc10edd9bb..5c4f8a9f25597 100644 --- a/data/json/npcs/starting_traits.json +++ b/data/json/npcs/starting_traits.json @@ -65,7 +65,6 @@ { "trait": "SAVANT", "prob": 10 }, { "trait": "SCHIZOPHRENIC", "prob": 1 }, { "trait": "SQUEAMISH", "prob": 20 }, - { "trait": "TRIGGERHAPPY", "prob": 10 }, { "trait": "ANTIWHEAT", "prob": 5 }, { "trait": "WOOLALLERGY", "prob": 5 } ] diff --git a/data/json/overmap/overmap_special/specials.json b/data/json/overmap/overmap_special/specials.json index 12496b6efe51d..b13ac5dcc6b76 100644 --- a/data/json/overmap/overmap_special/specials.json +++ b/data/json/overmap/overmap_special/specials.json @@ -4755,6 +4755,42 @@ "occurrences": [ 0, 5 ], "flags": [ "LAKE" ] }, + { + "type": "overmap_special", + "id": "trailhead_basic", + "overmaps": [ { "point": [ 0, 0, 0 ], "overmap": "trailhead_north" } ], + "connections": [ { "point": [ 0, -1, 0 ], "terrain": "road", "connection": "local_road", "from": [ 0, 0, 0 ] } ], + "city_sizes": [ 1, -1 ], + "//": "These actually get placed by some C++ trailhead placement code, so [0, 0] occurrences is deliberate.", + "occurrences": [ 0, 0 ], + "locations": [ "field" ] + }, + { + "type": "overmap_special", + "id": "trailhead_outhouse", + "overmaps": [ + { "point": [ 0, 0, 0 ], "overmap": "trailhead_outhouse_z0_north" }, + { "point": [ 0, 0, 1 ], "overmap": "trailhead_outhouse_z1_north" } + ], + "connections": [ { "point": [ 0, -1, 0 ], "terrain": "road", "connection": "local_road", "from": [ 0, 0, 0 ] } ], + "city_sizes": [ 1, -1 ], + "//": "These actually get placed by some C++ trailhead placement code, so [0, 0] occurrences is deliberate.", + "occurrences": [ 0, 0 ], + "locations": [ "field" ] + }, + { + "type": "overmap_special", + "id": "trailhead_shack", + "overmaps": [ + { "point": [ 0, 0, 0 ], "overmap": "trailhead_shack_z0_north" }, + { "point": [ 0, 0, 1 ], "overmap": "trailhead_shack_z1_north" } + ], + "connections": [ { "point": [ 0, -1, 0 ], "terrain": "road", "connection": "local_road", "from": [ 0, 0, 0 ] } ], + "city_sizes": [ 1, -1 ], + "//": "These actually get placed by some C++ trailhead placement code, so [0, 0] occurrences is deliberate.", + "occurrences": [ 0, 0 ], + "locations": [ "field" ] + }, { "type": "overmap_special", "id": "Island", diff --git a/data/json/overmap/overmap_terrain/overmap_terrain_transportation.json b/data/json/overmap/overmap_terrain/overmap_terrain_transportation.json index cf32339ffccd4..bf837b23d101b 100644 --- a/data/json/overmap/overmap_terrain/overmap_terrain_transportation.json +++ b/data/json/overmap/overmap_terrain/overmap_terrain_transportation.json @@ -68,6 +68,7 @@ "sym": "│", "color": "white", "see_cost": 2, + "extras": "bridge", "mapgen": [ { "method": "builtin", "name": "bridge" } ], "flags": [ "RIVER" ] }, @@ -297,11 +298,17 @@ }, { "type": "overmap_terrain", - "id": "trailhead", + "id": [ "trailhead", "trailhead_shack_z0", "trailhead_outhouse_z0" ], "name": "trailhead", "sym": "T", "color": "brown" }, + { + "type": "overmap_terrain", + "id": [ "trailhead_shack_z1", "trailhead_outhouse_z1" ], + "copy-from": "trailhead", + "name": "trailhead roof" + }, { "type": "overmap_terrain", "id": "sub_station", diff --git a/data/json/recipes/recipe_obsolete.json b/data/json/recipes/recipe_obsolete.json index 0d9c0a8a2eca1..de4ae5bb3adfc 100644 --- a/data/json/recipes/recipe_obsolete.json +++ b/data/json/recipes/recipe_obsolete.json @@ -2378,5 +2378,11 @@ "type": "recipe", "result": "q_solarpack_on", "obsolete": true + }, + { + "type": "recipe", + "result": "plastic_chunk", + "id_suffix": "from_cash_cards", + "obsolete": true } ] diff --git a/data/json/recipes/recipe_others.json b/data/json/recipes/recipe_others.json index bf9e235915d85..e3bb1ff21d76a 100644 --- a/data/json/recipes/recipe_others.json +++ b/data/json/recipes/recipe_others.json @@ -3391,19 +3391,21 @@ "time": "10 m", "autolearn": true, "tools": [ [ [ "surface_heat", 4, "LIST" ] ], [ [ "mold_plastic", -1 ] ] ], - "components": [ [ [ "bag_plastic", 10 ] ] ] - }, - { - "type": "recipe", - "result": "plastic_chunk", - "id_suffix": "from_cash_cards", - "category": "CC_OTHER", - "subcategory": "CSC_OTHER_MATERIALS", - "skill_used": "fabrication", - "time": "10 m", - "autolearn": true, - "tools": [ [ [ "surface_heat", 6, "LIST" ], [ "soldering_iron", 10 ] ] ], - "components": [ [ [ "cash_card", 9 ], [ "plastic_straw", 3 ], [ "bag_zipper", 25 ] ] ] + "components": [ + [ + [ "stopcock", 11 ], + [ "button_plastic", 3 ], + [ "bottle_folding", 4 ], + [ "plastic_straw", 3 ], + [ "plastic_knife", 2 ], + [ "plastic_spoon", 2 ], + [ "plastic_fork", 2 ], + [ "plastic_six_dice", 11 ], + [ "bag_zipper", 25 ], + [ "cup_plastic", 25 ], + [ "bag_plastic", 10 ] + ] + ] }, { "type": "recipe", diff --git a/data/json/regional_map_settings.json b/data/json/regional_map_settings.json index 442ac6d205088..0ca6821b684d2 100644 --- a/data/json/regional_map_settings.json +++ b/data/json/regional_map_settings.json @@ -365,7 +365,8 @@ "trail_width_offset_min": 1, "trail_width_offset_max": 3, "clear_trail_terrain": false, - "trail_terrain": { "t_dirt": 1 } + "trail_terrain": { "t_dirt": 1 }, + "trailheads": { "trailhead_basic": 1, "trailhead_outhouse": 1, "trailhead_shack": 1 } }, "map_extras": { "forest": { @@ -489,7 +490,6 @@ "mx_drugdeal": 30, "mx_supplydrop": 10, "mx_portal": 5, - "mx_minefield": 80, "mx_crater": 10, "mx_portal_in": 4, "mx_roadworks": 100, @@ -499,6 +499,7 @@ "mx_prison_bus": 15 } }, + "bridge": { "chance": 5, "extras": { "mx_minefield": 100 } }, "build": { "chance": 90, "extras": { diff --git a/data/json/test_regions.json b/data/json/test_regions.json index 0fedc4958e889..d46d4f3782a68 100644 --- a/data/json/test_regions.json +++ b/data/json/test_regions.json @@ -104,7 +104,8 @@ "trail_width_offset_min": 1, "trail_width_offset_max": 3, "clear_trail_terrain": false, - "trail_terrain": { "t_dirt": 1 } + "trail_terrain": { "t_dirt": 1 }, + "trailheads": { "trailhead_basic": 1, "trailhead_outhouse": 1, "trailhead_shack": 1 } }, "city": { "shop_radius": 30, diff --git a/data/mods/Aftershock/items/books.json b/data/mods/Aftershock/items/books.json index a5b3aba4e71f6..4a6b5b140abf9 100644 --- a/data/mods/Aftershock/items/books.json +++ b/data/mods/Aftershock/items/books.json @@ -129,5 +129,34 @@ "name": { "str": "tripod schematics", "str_pl": "tripod schematics" }, "description": "Bearing the logo of Honda, those are assembly plans, design specs, and technical drawings for the tripod. Most of this is useless to you, but you could use the assembly plans to re-assemble the robot from salvaged parts.", "copy-from": "schematics_generic" + }, + { + "id": "recipe_uplift", + "type": "BOOK", + "name": { "str": "Dr Moreau and You", "str_pl": "copies of Dr Moreau and You" }, + "description": "In what many considered a stunning example of poor taste and others considered overt specieism this text on the creation of Uplifted Animals references a story about sapient animals killing their creator. Otherwise a dry text about genetic modification.", + "copy-from": "textbook_atomic", + "skill": "cooking", + "required_level": 9, + "max_level": 10 + }, + { + "id": "millyficents_diary", + "type": "BOOK", + "name": { "str": "Millyficent's Diary", "str_pl": "copies of Millyficent's Diary" }, + "description": "A pocket-sized book filled to the margins with cramped handwriting and notes on the biology of Mi-Go and other musings. It's hard to understand and quite gruesome in some places and written in a shorthand or cipher in others.", + "weight": "600 g", + "volume": "250 ml", + "price": 300000, + "material": [ "paper" ], + "symbol": "?", + "looks_like": "ZSG", + "color": "cyan", + "skill": "cooking", + "required_level": 10, + "max_level": 10, + "intelligence": 16, + "time": "15 m", + "fun": -3 } ] diff --git a/data/mods/Aftershock/items/crafting_scrap/abstract_scrap.json b/data/mods/Aftershock/items/crafting_scrap/abstract_scrap.json index b529cda9d6512..fca57bcc6ee88 100644 --- a/data/mods/Aftershock/items/crafting_scrap/abstract_scrap.json +++ b/data/mods/Aftershock/items/crafting_scrap/abstract_scrap.json @@ -3,7 +3,7 @@ "abstract": "afs_scrap_1", "type": "GENERIC", "category": "spare_parts", - "name": "ur-scrap", + "name": { "str": "ur-scrap" }, "description": "A small techno doodad.", "looks_like": "e_scrap", "price": 500, @@ -17,7 +17,7 @@ { "type": "GENERIC", "abstract": "afs_scrap_2", - "name": "ur-scrap", + "name": { "str": "ur-scrap" }, "copy-from": "afs_scrap_1", "price": 5000, "price_postapoc": 10000 @@ -25,7 +25,7 @@ { "type": "GENERIC", "abstract": "afs_scrap_3", - "name": "ur-scrap", + "name": { "str": "ur-scrap" }, "copy-from": "afs_scrap_1", "price": 5000, "price_postapoc": 50000 @@ -33,7 +33,7 @@ { "type": "GENERIC", "abstract": "afs_scrap_4", - "name": "ur-scrap", + "name": { "str": "ur-scrap" }, "copy-from": "afs_scrap_1", "price": 50000, "price_postapoc": 100000 @@ -41,7 +41,7 @@ { "type": "GENERIC", "abstract": "afs_scrap_5", - "name": "ur-scrap", + "name": { "str": "ur-scrap" }, "copy-from": "afs_scrap_1", "price": 500000, "price_postapoc": 1000000 diff --git a/data/mods/Aftershock/items/crafting_scrap/biomaterial_scrap.json b/data/mods/Aftershock/items/crafting_scrap/biomaterial_scrap.json new file mode 100644 index 0000000000000..55bb5e2a45fd7 --- /dev/null +++ b/data/mods/Aftershock/items/crafting_scrap/biomaterial_scrap.json @@ -0,0 +1,42 @@ +[ + { + "type": "GENERIC", + "id": "afs_biomaterial_1", + "copy-from": "afs_scrap_1", + "name": { "str": "monomeric slurry" }, + "description": "A collection of the building blocks of polymers. With this and a whole lot of know how you can create proteins and other building blocks of life.", + "looks_like": "scrap" + }, + { + "type": "GENERIC", + "id": "afs_biomaterial_2", + "copy-from": "afs_scrap_2", + "name": { "str": "micellular growth medium" }, + "description": "For the mixing of biomaterials that might otherwise be antithetical to one another.", + "looks_like": "scrap" + }, + { + "type": "GENERIC", + "id": "afs_biomaterial_3", + "copy-from": "afs_scrap_1", + "name": { "str": "artificial muscle fibers" }, + "description": "Lab grown or bioprinted muscle fibers, much denser and with higher performance ratios than baseline human muscles.", + "looks_like": "scrap" + }, + { + "type": "GENERIC", + "id": "afs_biomaterial_4", + "copy-from": "afs_scrap_4", + "name": { "str": "self healing polymers" }, + "description": "Materials capable of taking environmental chemicals and utilizing them for self repair, be careful you don't make grey goo.", + "looks_like": "scrap" + }, + { + "type": "GENERIC", + "id": "afs_biomaterial_5", + "copy-from": "afs_scrap_5", + "name": { "str": "autologous totipotent tissue culture" }, + "description": "Uncontaminated pure cellular matter than with the right instructions can become just about anything.", + "looks_like": "scrap" + } +] diff --git a/data/mods/Aftershock/items/crafting_scrap/circuity_scrap.json b/data/mods/Aftershock/items/crafting_scrap/circuity_scrap.json index 648f8deda18f1..1968618eeff09 100644 --- a/data/mods/Aftershock/items/crafting_scrap/circuity_scrap.json +++ b/data/mods/Aftershock/items/crafting_scrap/circuity_scrap.json @@ -3,7 +3,7 @@ "type": "GENERIC", "id": "afs_circuitry_1", "copy-from": "afs_scrap_1", - "name": "scrap photonics", + "name": { "str": "scrap photonics" }, "description": "Small circuits blue and gold, transmitting signals through light.", "looks_like": "scrap" }, @@ -11,7 +11,7 @@ "type": "GENERIC", "id": "afs_circuitry_2", "copy-from": "afs_scrap_2", - "name": "photonic circuitry", + "name": { "str": "photonic circuitry" }, "description": "A resplendent golden grid inlaid on dark blue substrate.", "looks_like": "scrap" }, @@ -19,7 +19,7 @@ "type": "GENERIC", "id": "afs_circuitry_3", "copy-from": "afs_scrap_3", - "name": "photonic computation core", + "name": { "str": "photonic computation core" }, "description": "A monolithic circuit shaped as a glowing cube of crystal.", "looks_like": "scrap" }, @@ -27,7 +27,7 @@ "type": "GENERIC", "id": "afs_circuitry_4", "copy-from": "afs_scrap_4", - "name": "hypergeometric photonics", + "name": { "str": "hypergeometric photonics" }, "description": "In your hands lies a self-contained digital universe. Its programs glowing like stars fixed on computational shells infinitely layered.", "looks_like": "scrap" }, @@ -35,7 +35,7 @@ "type": "GENERIC", "id": "afs_circuitry_5", "copy-from": "afs_scrap_5", - "name": "acausal logic permutator", + "name": { "str": "acausal logic permutator" }, "description": "It has given you an answer, but you are yet to ask anything.", "looks_like": "scrap" } diff --git a/data/mods/Aftershock/items/crafting_scrap/energy_storage_scrap.json b/data/mods/Aftershock/items/crafting_scrap/energy_storage_scrap.json index 110562c24db93..71e55af3b07e6 100644 --- a/data/mods/Aftershock/items/crafting_scrap/energy_storage_scrap.json +++ b/data/mods/Aftershock/items/crafting_scrap/energy_storage_scrap.json @@ -3,7 +3,7 @@ "type": "GENERIC", "id": "afs_energy_storage_1", "copy-from": "afs_scrap_1", - "name": "nanowire battery", + "name": { "str": "nanowire battery" }, "description": "A small battery component with a very high energy density.", "looks_like": "scrap" }, @@ -11,7 +11,7 @@ "type": "GENERIC", "id": "afs_energy_storage_2", "copy-from": "afs_scrap_2", - "name": "ultracapacitor", + "name": { "str": "ultracapacitor" }, "description": "A capacitor made from exotic compounds, capable of storing a high amount of electric charge.", "looks_like": "scrap" }, @@ -19,7 +19,7 @@ "type": "GENERIC", "id": "afs_energy_storage_3", "copy-from": "afs_scrap_3", - "name": "ultracapacitor array", + "name": { "str": "ultracapacitor array" }, "description": "Ultracapacitors assembled into a finely tunned energy storage array.", "looks_like": "scrap" }, @@ -27,7 +27,7 @@ "type": "GENERIC", "id": "afs_energy_storage_4", "copy-from": "afs_scrap_4", - "name": "superconductive coil", + "name": { "str": "superconductive coil" }, "description": "Superconductive wire warped upon itself manipulates the electromagnetic spectrum to store vast amounts of power.", "looks_like": "scrap" }, @@ -35,7 +35,7 @@ "type": "GENERIC", "id": "afs_energy_storage_5", "copy-from": "afs_scrap_5", - "name": "zero-point energy extractor", + "name": { "str": "zero-point energy extractor" }, "description": "A complex grid pins space-time to the surface of the multiversal hyper-torus, allowing the energies within to leak into our sliver of existence.", "looks_like": "scrap" } diff --git a/data/mods/Aftershock/items/crafting_scrap/magnet_scrap.json b/data/mods/Aftershock/items/crafting_scrap/magnet_scrap.json index 64fa59e99bcf3..96e69aa16032c 100644 --- a/data/mods/Aftershock/items/crafting_scrap/magnet_scrap.json +++ b/data/mods/Aftershock/items/crafting_scrap/magnet_scrap.json @@ -3,7 +3,7 @@ "type": "GENERIC", "id": "afs_magnet_1", "copy-from": "afs_scrap_1", - "name": "high quality electromagnet", + "name": { "str": "high quality electromagnet" }, "description": "A sturdy, industrially crafted electromagnet.", "looks_like": "scrap" }, @@ -11,7 +11,7 @@ "type": "GENERIC", "id": "afs_magnet_2", "copy-from": "afs_scrap_2", - "name": "cryo electromagnet", + "name": { "str": "cryo electromagnet" }, "description": "A powerful super conductive electromagnet, that must be kept at very low temperatures to operate.", "looks_like": "scrap" }, @@ -19,7 +19,7 @@ "type": "GENERIC", "id": "afs_magnet_3", "copy-from": "afs_scrap_3", - "name": "super conductive electromagnet", + "name": { "str": "super conductive electromagnet" }, "description": "A powerful electromagnet made from a room temperature superconductor .", "looks_like": "scrap" } diff --git a/data/mods/Aftershock/items/crafting_scrap/material_scrap.json b/data/mods/Aftershock/items/crafting_scrap/material_scrap.json index ef49f59636b74..db4e97582be21 100644 --- a/data/mods/Aftershock/items/crafting_scrap/material_scrap.json +++ b/data/mods/Aftershock/items/crafting_scrap/material_scrap.json @@ -3,7 +3,7 @@ "type": "GENERIC", "id": "afs_material_1", "copy-from": "afs_scrap_1", - "name": "composite alloy", + "name": { "str": "composite alloy" }, "description": "Miscellaneous scrap pieces made from a composite alloy.", "looks_like": "scrap" }, @@ -11,7 +11,7 @@ "type": "GENERIC", "id": "afs_material_2", "copy-from": "afs_scrap_2", - "name": "vacuum cast carbide", + "name": { "str": "vacuum cast carbide" }, "description": "Malleable carbide cast by forges on high earth orbit.", "looks_like": "scrap" }, @@ -19,7 +19,7 @@ "type": "GENERIC", "id": "afs_material_3", "copy-from": "afs_scrap_1", - "name": "nanoprinted alloy", + "name": { "str": "nanoprinted alloy" }, "description": "A meta material fabricated by precisely layering different elements at an atomic scale.", "looks_like": "scrap" }, @@ -27,7 +27,7 @@ "type": "GENERIC", "id": "afs_material_4", "copy-from": "afs_scrap_4", - "name": "crystal forged neutrite", + "name": { "str": "crystal forged neutrite" }, "description": "Great forges within the Earth's core wrought hydrogen into flaming metal and poured it within lattices of super conductive lanthanum. Locked in magnetic equilibrium, it was left to cool into a dark unbreakable metal", "looks_like": "scrap" }, @@ -35,7 +35,7 @@ "type": "GENERIC", "id": "afs_material_5", "copy-from": "afs_scrap_5", - "name": "phase uneven matter", + "name": { "str": "phase uneven matter" }, "description": "Matter condensed from the liminal spaces between dimmensions.", "looks_like": "scrap" } diff --git a/data/mods/Aftershock/items/crafting_scrap/neural_io_scrap.json b/data/mods/Aftershock/items/crafting_scrap/neural_io_scrap.json index 538390ee5dec5..0278bef0758af 100644 --- a/data/mods/Aftershock/items/crafting_scrap/neural_io_scrap.json +++ b/data/mods/Aftershock/items/crafting_scrap/neural_io_scrap.json @@ -3,7 +3,7 @@ "type": "GENERIC", "id": "afs_neural_io_1", "copy-from": "afs_scrap_1", - "name": "peripheral electrode", + "name": { "str": "peripheral electrode" }, "description": "A thin strand of wire and a clamp, meant to be spliced into the smaller nerves of the human body.", "looks_like": "scrap" }, @@ -11,7 +11,7 @@ "type": "GENERIC", "id": "afs_neural_io_2", "copy-from": "afs_scrap_2", - "name": "neural electrode", + "name": { "str": "neural electrode" }, "description": "A small array of metallic needles allows complex communication between machine and human mind.", "looks_like": "scrap" }, @@ -19,7 +19,7 @@ "type": "GENERIC", "id": "afs_neural_io_3", "copy-from": "afs_scrap_3", - "name": "brain implant prod", + "name": { "str": "brain implant prod" }, "description": "A complexly etched rod of metal interfaces with the corpus callosum of the patient, granting increased control of bionic functions.", "looks_like": "scrap" }, @@ -27,7 +27,7 @@ "type": "GENERIC", "id": "afs_neural_io_4", "copy-from": "afs_scrap_4", - "name": "artificial neural tissue", + "name": { "str": "artificial neural tissue" }, "description": "Photonic axons process thought at speeds far surpassing primitive, chemical-driven communication.", "looks_like": "scrap" }, @@ -35,7 +35,7 @@ "type": "GENERIC", "id": "afs_neural_io_5", "copy-from": "afs_scrap_5", - "name": "neurosynaptic interface matrix", + "name": { "str": "neurosynaptic interface matrix" }, "description": "A membrane of artificial neurons envelops the cerebral cortex, melding machine and human intellect into a gestalt much greater than its individual parts.", "looks_like": "scrap" } diff --git a/data/mods/Aftershock/items/item_groups.json b/data/mods/Aftershock/items/item_groups.json index 48be6a3a7d45d..f0d4f286acd81 100644 --- a/data/mods/Aftershock/items/item_groups.json +++ b/data/mods/Aftershock/items/item_groups.json @@ -182,6 +182,41 @@ "subtype": "distribution", "items": [ [ "afs_titanium_tooth", 25 ] ] }, + { + "id": "swat_gear", + "type": "item_group", + "items": [ + { "item": "xlswat_armor", "prob": 12 }, + { "item": "xlballistic_vest_empty", "prob": 6 }, + { "item": "xlballistic_vest_esapi", "prob": 3 }, + { "item": "xlboots_combat", "prob": 15 }, + { "item": "xlgloves_tactical", "prob": 10 }, + { "item": "tripaw_xlgloves_tactical", "prob": 8 } + ] + }, + { + "id": "mil_armor", + "type": "item_group", + "items": [ + { "item": "xlballistic_vest_empty", "prob": 6 }, + { "item": "xlballistic_vest_esapi", "prob": 3 }, + { "item": "xlboots_combat", "prob": 15 }, + { "item": "xlgloves_tactical", "prob": 10 }, + { "item": "tripaw_xlgloves_tactical", "prob": 8 } + ] + }, + { + "id": "rare", + "type": "item_group", + "items": [ + { "item": "xlswat_armor", "prob": 60 }, + { "item": "xlballistic_vest_empty", "prob": 65 }, + { "item": "xlballistic_vest_esapi", "prob": 39 }, + { "item": "xlboots_combat", "prob": 70 }, + { "item": "xlgloves_tactical", "prob": 50 }, + { "item": "tripaw_xlgloves_tactical", "prob": 48 } + ] + }, { "type": "item_group", "id": "guns_ganger", diff --git a/data/mods/Aftershock/items/mutagen.json b/data/mods/Aftershock/items/mutagen.json index b17547f34c6cd..98c4d1f6a167a 100644 --- a/data/mods/Aftershock/items/mutagen.json +++ b/data/mods/Aftershock/items/mutagen.json @@ -18,5 +18,25 @@ "description": "An extremely rare mutagen cocktail, it smells of sulphur and glows orange.", "price": 500000, "use_action": { "type": "mutagen", "mutation_category": "MIGO" } + }, + { + "id": "iv_mutagen_mastodon", + "copy-from": "iv_mutagen_flavor", + "type": "COMESTIBLE", + "name": { "str": "mastodon serum" }, + "description": "A super-concentrated mutagen not for those frightened of this thing they have become. You need a syringe to inject it… if you really want to?", + "price": 1000000, + "color": "red", + "healthy": -4, + "use_action": { "type": "mutagen_iv", "mutation_category": "MIGO" } + }, + { + "id": "mutagen_mastodon", + "copy-from": "mutagen_flavor", + "type": "COMESTIBLE", + "name": { "str": "mastodon mutagen" }, + "description": "An extremely rare mutagen cocktail, it seeks to cure what's deep inside.", + "price": 500000, + "use_action": { "type": "mutagen", "mutation_category": "MIGO" } } ] diff --git a/data/mods/Aftershock/items/xl_gear.json b/data/mods/Aftershock/items/xl_gear.json new file mode 100644 index 0000000000000..002256065b1f5 --- /dev/null +++ b/data/mods/Aftershock/items/xl_gear.json @@ -0,0 +1,140 @@ +[ + { + "id": "xlswat_armor", + "repairs_like": "survivor_suit", + "type": "ARMOR", + "category": "armor", + "name": "SWAT armor", + "//": "This is well within the pricing structure I found for ballistic vest, shins, and LBE. LEO gear ain't cheap.", + "description": "An extra large suit of black bulletproof armor with lots of pockets. The word SWAT is emblazoned across the back. Specifically designed for Uplifted officers such as Mastodons.", + "weight": "10 kg", + "volume": "20 L", + "price": 585000, + "to_hit": -3, + "bashing": 6, + "material": [ "kevlar", "cotton" ], + "symbol": "[", + "looks_like": "touring_suit", + "color": "dark_gray", + "covers": [ "LEGS", "TORSO", "ARMS" ], + "coverage": 95, + "encumbrance": 25, + "storage": "8 L", + "warmth": 35, + "material_thickness": 9, + "valid_mods": [ "steel_padded" ], + "environmental_protection": 4, + "flags": [ "OVERSIZE", "POCKETS", "STURDY" ] + }, + { + "id": "xlballistic_vest_empty", + "type": "ARMOR", + "category": "armor", + "//": "Based on US Army SPCS", + "name": { "str": "empty ballistic vest" }, + "description": "Oversized ballistic armor without any armor inserts. The soft armor plate carrier is still protective but it won't stop high energy projectiles.", + "weight": "4 kg", + "volume": "7 L", + "price": 160000, + "material": [ "nylon" ], + "symbol": "[", + "color": "light_gray", + "covers": [ "TORSO" ], + "coverage": 85, + "encumbrance": 6, + "warmth": 15, + "material_thickness": 8, + "flags": [ "OVERSIZE", "STURDY", "OUTER", "WATER_FRIENDLY" ] + }, + { + "id": "xlballistic_vest_esapi", + "type": "ARMOR", + "category": "armor", + "name": { "str": "ESAPI ballistic vest" }, + "description": "Oversized ballistic armor with ESAPI ceramic armor plates.", + "weight": "12 kg", + "volume": "9 L", + "price": 280000, + "material": [ "nylon", "ceramic" ], + "symbol": "[", + "color": "light_gray", + "covers": [ "TORSO" ], + "coverage": 85, + "encumbrance": 10, + "warmth": 15, + "material_thickness": 26, + "flags": [ "OVERSIZE", "STURDY", "OUTER", "WATER_FRIENDLY", "NO_REPAIR" ] + }, + { + "id": "xlboots_combat", + "repairs_like": "boots_survivor", + "type": "ARMOR", + "category": "armor", + "name": "pair of combat boots", + "name_plural": "pairs of combat boots", + "description": "Modern oversized reinforced tactical combat boots. Very durable.", + "weight": "1460 g", + "volume": "5 L", + "price": 7000, + "price_postapoc": 14000, + "to_hit": -1, + "bashing": 1, + "material": [ "kevlar", "leather" ], + "symbol": "[", + "looks_like": "boots", + "color": "dark_gray", + "covers": [ "FEET" ], + "coverage": 100, + "encumbrance": 25, + "warmth": 25, + "material_thickness": 5, + "environmental_protection": 2, + "flags": [ "OVERSIZE", "VARSIZE", "WATERPROOF", "STURDY" ] + }, + { + "id": "xlgloves_tactical", + "repairs_like": "gloves_survivor", + "type": "ARMOR", + "category": "armor", + "name": "pair of tactical gloves", + "name_plural": "pairs of tactical gloves", + "description": "A pair of oversized reinforced Kevlar tactical gloves. Commonly used by police and military units.", + "weight": "1 kg", + "volume": "750 ml", + "price": 5200, + "to_hit": 2, + "material": [ "kevlar", "leather" ], + "symbol": "[", + "looks_like": "fire_gauntlets", + "color": "dark_gray", + "covers": [ "HANDS" ], + "coverage": 100, + "encumbrance": 13, + "warmth": 20, + "material_thickness": 5, + "flags": [ "OVERSIZE", "VARSIZE", "STURDY" ] + }, + { + "id": "tripaw_xlgloves_tactical", + "repairs_like": "gloves_survivor", + "type": "ARMOR", + "category": "armor", + "name": "pair of tactical gloves", + "name_plural": "pairs of tactical gloves", + "description": "A pair of reinforced Kevlar tactical gloves. Specifically designed to accomodate three fingered Killophants. Thinner than regular oversized tactical gloves.", + "weight": "320 g", + "volume": "750 ml", + "price": 5200, + "to_hit": 2, + "material": [ "kevlar", "leather" ], + "symbol": "[", + "looks_like": "fire_gauntlets", + "color": "dark_gray", + "covers": [ "HANDS" ], + "coverage": 100, + "encumbrance": 5, + "warmth": 20, + "material_thickness": 3, + "flags": [ "OVERSIZE", "VARSIZE", "STURDY" ] + } +] diff --git a/data/mods/Aftershock/npcs/mutant_npcs/npc_classes_mutant.json b/data/mods/Aftershock/npcs/mutant_npcs/npc_classes_mutant.json index ab0677b3ac616..7f9e7377356e1 100644 --- a/data/mods/Aftershock/npcs/mutant_npcs/npc_classes_mutant.json +++ b/data/mods/Aftershock/npcs/mutant_npcs/npc_classes_mutant.json @@ -381,5 +381,24 @@ { "group": "trait_group_raptor" }, { "distribution": [ { "group": "trait_group_raptor_nonthres" }, { "group": "trait_group_raptor_postthres" } ] } ] + }, + { + "type": "npc_class", + "id": "NC_NPC_MUTANT_MASTODON", + "name": "Mastodon Uplift", + "job_description": "Humans created me. Let's see what I can be on my own.", + "skills": [ + { "skill": "survival", "bonus": { "rng": [ 2, 4 ] } }, + { "skill": "melee", "bonus": { "rng": [ 6, 10 ] } }, + { "skill": "unarmed", "bonus": { "rng": [ 6, 10 ] } } + ], + "bonus_str": 3, + "traits": [ + { "group": "trait_mutant_npc_common" }, + { "group": "trait_group_mastodon" }, + { + "distribution": [ { "group": "trait_group_mastodon_nonthres" }, { "group": "trait_group_mastodon_postthres" } ] + } + ] } ] diff --git a/data/mods/Aftershock/npcs/mutant_npcs/trait_groups.json b/data/mods/Aftershock/npcs/mutant_npcs/trait_groups.json index c8b08a0792f54..7f96b7efc88f3 100644 --- a/data/mods/Aftershock/npcs/mutant_npcs/trait_groups.json +++ b/data/mods/Aftershock/npcs/mutant_npcs/trait_groups.json @@ -917,8 +917,55 @@ { "trait": "SAVANT", "prob": 10 }, { "trait": "SCHIZOPHRENIC", "prob": 10 }, { "trait": "SQUEAMISH", "prob": 10 }, - { "trait": "TRIGGERHAPPY", "prob": 10 }, { "group": "Appearance_demographics", "prob": 100 } ] + }, + { + "type": "trait_group", + "id": "trait_group_mastodon", + "subtype": "collection", + "traits": [ + { "trait": "PATCHFUR", "prob": 50 }, + { "trait": "LEATHER_FEET", "prob": 50 }, + { "trait": "SKINFOLDS", "prob": 50 }, + { "trait": "HAULER", "prob": 50 }, + { "trait": "WEAKJOINTS", "prob": 50 }, + { "trait": "UPLIFTED" }, + { "trait": "ELEPHANTINE_SMELL", "prob": 50 }, + { "trait": "SPECAILIZED_DIET", "prob": 50 }, + { "trait": "ELEPHANTINE_SMELL", "prob": 50 }, + { "trait": "CRUSHINGFEET", "prob": 50 }, + { "trait": "HERBIVORE", "prob": 50 }, + { "trait": "FACEBUMPS", "prob": 50 } + ] + }, + { + "type": "trait_group", + "id": "trait_group_mastodon_nonthres", + "subtype": "collection", + "traits": [ + { "trait": "MUT_TANK", "prob": 50 }, + { "trait": "TUSKS", "prob": 50 }, + { "distribution": [ { "trait": "SHORTFUR" }, { "trait": "MEDIUMFUR" } ] } + ] + }, + { + "type": "trait_group", + "id": "trait_group_mastodon_postthres", + "subtype": "collection", + "traits": [ + { "trait": "THRESH_MASTODON" }, + { "distribution": [ { "trait": "ELEPHANTINE" }, { "trait": "ELEPHANTINE_OK" } ] }, + { "trait": "MUT_TANK2", "prob": 50 }, + { "trait": "GIGANTIC", "prob": 20 }, + { "trait": "GIGANTIC_OK", "prob": 20 }, + { "trait": "TUSKS_POINTED", "prob": 50 }, + { + "distribution": [ + { "trait": "TRUMPET" }, + { "collection": [ { "trait": "BIG_FOOD" }, { "trait": "LARGE_DIET" }, { "trait": "FLUSH" } ] } + ] + } + ] } ] diff --git a/data/mods/Aftershock/player/mutations/mastodon_mutation.json b/data/mods/Aftershock/player/mutations/mastodon_mutation.json new file mode 100644 index 0000000000000..ea9e69577780c --- /dev/null +++ b/data/mods/Aftershock/player/mutations/mastodon_mutation.json @@ -0,0 +1,534 @@ +[ + { + "type": "mutation", + "id": "UPLIFTED", + "name": "Uplifted", + "points": 2, + "description": "You come from uplifted animal stock. This decreases morale penalties for being wet.", + "starting_trait": true, + "valid": false, + "wet_protection": [ + { "part": "HEAD", "neutral": 9 }, + { "part": "LEG_L", "neutral": 11 }, + { "part": "LEG_R", "neutral": 11 }, + { "part": "FOOT_L", "neutral": 5 }, + { "part": "FOOT_R", "neutral": 5 }, + { "part": "ARM_L", "neutral": 11 }, + { "part": "ARM_R", "neutral": 11 }, + { "part": "HAND_L", "neutral": 16 }, + { "part": "HAND_R", "neutral": 16 }, + { "part": "TORSO", "neutral": 14 } + ] + }, + { + "type": "mutation", + "id": "LEATHER_FEET", + "name": "Leathered Feet", + "points": 1, + "description": "The bottoms of your feet are tough like an animals. You receive no movement penalty for not wearing shoes.", + "category": [ "MASTODON" ] + }, + { + "type": "mutation", + "id": "SKINFOLDS", + "name": "Skinfolds", + "points": 1, + "description": "Your skin is tough. Cutting damage is slightly reduced for you. Slightly decreases wet penalties.", + "starting_trait": true, + "category": [ "MASTODON" ], + "cancels": [ "THINSKIN" ], + "wet_protection": [ + { "part": "LEG_L", "neutral": 2 }, + { "part": "LEG_R", "neutral": 2 }, + { "part": "ARM_L", "neutral": 2 }, + { "part": "ARM_R", "neutral": 2 }, + { "part": "TORSO", "neutral": 4 } + ], + "armor": [ { "parts": "ALL", "cut": 1 } ] + }, + { + "type": "mutation", + "id": "HAULER", + "name": "Hauler", + "points": 2, + "description": "You are capable of carrying far more than someone with similar strength could. Your maximum weight carried is increased by 60%.", + "category": [ "MASTODON" ], + "cancels": [ "BADBACK" ], + "weight_capacity_modifier": 1.6 + }, + { + "type": "mutation", + "id": "WEAKJOINTS", + "name": { "str": "Weak Joints" }, + "points": -1, + "description": "A common flaw in your genemod, brought on by increased muscle mass and bone density. Moving over rough terrain will slow you down more than normal.", + "cancels": [ "PARKOUR" ], + "category": [ "MASTODON" ], + "movecost_obstacle_modifier": 1.15 + }, + { + "type": "mutation", + "id": "SPECAILIZED_DIET", + "name": "Herbivorous Ancestry", + "points": -2, + "description": "You have problems with eating meat. It's possible for you to eat it, but you will suffer morale penalties and obtain less nutrition from it.", + "category": [ "MASTODON" ], + "vitamins_absorb_multi": [ [ "flesh", [ [ "vitA", 0 ], [ "vitB", 0 ], [ "vitC", 0 ], [ "calcium", 0 ], [ "iron", 0 ] ] ] ], + "cancels": [ "CANNIBAL", "MEATARIAN", "ANTIFRUIT" ] + }, + { + "type": "mutation", + "id": "ELEPHANTINE_SMELL", + "name": "Strong Scent", + "points": -1, + "description": "Your scent is particularly strong. It's vaguely offensive to humans, and animals that track your scent will do so more easily.", + "starting_trait": true, + "changes_to": [ "SMELLY2" ], + "types": [ "SCENT" ], + "scent_intensity": 800, + "social_modifiers": { "persuade": -5, "intimidate": -5 }, + "category": [ "MASTODON" ] + }, + { + "type": "mutation", + "id": "GIANT_STEPS", + "name": { "str": "Giant Step" }, + "points": -1, + "description": "You make more noise while walking. You're also more likely to set off traps.", + "category": [ "MASTODON" ], + "cancels": [ "LIGHTSTEP" ], + "noise_modifier": 1.7 + }, + { + "type": "mutation", + "id": "SLOWANDSTEADY", + "name": "Slow and Steady", + "points": -3, + "description": "You can't move as fast as most, resulting in a 10% speed penalty on flat ground.", + "category": [ "MASTODON" ], + "types": [ "RUNNING" ], + "movecost_flatground_modifier": 1.1 + }, + { + "type": "mutation", + "id": "PATCHFUR", + "name": "Patched Fur", + "points": 0, + "visibility": 2, + "ugliness": 1, + "description": "Your skin has patches of light fur. This has no impact on your life except marking you as not fully human.", + "types": [ "SKIN" ], + "changes_to": [ "SHORTFUR" ], + "category": [ "MASTODON" ] + }, + { + "type": "mutation", + "id": "SHORTFUR", + "name": { "str": "Short Fur Coat" }, + "points": 1, + "visibility": 6, + "ugliness": 2, + "bodytemp_modifiers": [ 100, 300 ], + "bodytemp_sleep": 100, + "description": "Short fur has grown to cover your entire body, providing slight protection from cold.", + "category": [ "MASTODON" ], + "types": [ "SKIN" ], + "prereqs": [ "SHORTFUR" ], + "changes_to": [ "MEDIUMFUR" ] + }, + { + "type": "mutation", + "id": "MEDIUMFUR", + "name": { "str": "Furry" }, + "points": 2, + "visibility": 10, + "ugliness": 3, + "bodytemp_modifiers": [ 350, 700 ], + "bodytemp_sleep": 500, + "description": "Thick brown fur has grown to cover your entire body, providing a slight protection against attacks, and some protection from cold.", + "types": [ "SKIN" ], + "changes_to": [ "MASTODON_FUR" ], + "prereqs": [ "LIGHTFUR" ], + "category": [ "MASTODON" ], + "armor": [ { "parts": "ALL", "bash": 2 } ] + }, + { + "type": "mutation", + "id": "MASTODON_FUR", + "name": { "str": "Shaggy Fur" }, + "points": 4, + "visibility": 10, + "ugliness": 3, + "bodytemp_modifiers": [ 750, 1500 ], + "bodytemp_sleep": 500, + "description": "Your fur has grown out and thickened, providing noticeable protection from attacks as well as considerable insulation.", + "types": [ "SKIN" ], + "prereqs": [ "MEDIUMFUR" ], + "category": [ "MASTODON" ], + "threshreq": [ "THRESH_MASTODON" ], + "armor": [ { "parts": "ALL", "bash": 4 } ] + }, + { + "type": "mutation", + "id": "CRUSHINGFEET", + "name": "Crushing Feet", + "points": -4, + "visibility": 2, + "ugliness": 2, + "mixed_effect": true, + "description": "Your feet have grown massive and ready to support huge weight. This allows kicking attacks to do much more damage, provides natural armor, and removes the need to wear shoes; however, you cannot wear normal size shoes. Reduces wet effects.", + "types": [ "LEGS" ], + "category": [ "MASTODON" ], + "wet_protection": [ { "part": "FOOT_L", "neutral": 10 }, { "part": "FOOT_R", "neutral": 10 } ], + "destroys_gear": true, + "armor": [ { "parts": [ "FOOT_L", "FOOT_R" ], "bash": 2, "cut": 2 } ], + "attacks": { + "attack_text_u": "You kick %s with your massive feet", + "attack_text_npc": "%1$s kicks %2$s with their massive feet", + "chance": 20, + "strength_damage": { "damage_type": "bash", "amount": 5 } + } + }, + { + "type": "mutation", + "id": "RUMINANT", + "copy-from": "RUMINANT", + "extend": { "category": [ "MASTODON" ] } + }, + { + "type": "mutation", + "id": "GRAZER", + "copy-from": "GRAZER", + "extend": { "category": [ "MASTODON" ] } + }, + { + "type": "mutation", + "id": "FACEBUMPS", + "name": "Face Bumps", + "points": 0, + "visibility": 3, + "ugliness": 3, + "description": "You have a pair of bumps on your face above your mouth and beside your nose.", + "changes_to": [ "TUSKS" ] + }, + { + "type": "mutation", + "id": "TUSKS", + "name": "Tusks", + "points": 1, + "visibility": 3, + "ugliness": 1, + "description": "You have a pair of small tusks on your face. They allow you to make a weak piercing goring attack.", + "types": [ "HORNS" ], + "prereqs": [ "FACEBUMPS" ], + "changes_to": [ "TUSKS_POINTED" ], + "category": [ "MASTODON" ], + "attacks": { + "attack_text_u": "You gore %s with your tusks", + "attack_text_npc": "%1$s gores %2$s with their tusks", + "chance": 20, + "base_damage": [ { "damage_type": "stab", "amount": 3 }, { "damage_type": "bash", "amount": 3 } ] + } + }, + { + "type": "mutation", + "id": "TUSKS_POINTED", + "name": "Pointed Tusks", + "points": 1, + "visibility": 8, + "ugliness": 2, + "mixed_effect": true, + "description": "You have a pair of long, pointed tusks, like someone weaponized an elephant. They allow you to make a strong piercing headbutt attack, but prevent wearing mouthgear that is not made of fabric.", + "types": [ "HORNS" ], + "prereqs": [ "HORNS" ], + "restricts_gear": [ "MOUTH" ], + "allow_soft_gear": true, + "category": [ "MASTODON" ], + "threshreq": [ "THRESH_MASTODON" ], + "attacks": { + "attack_text_u": "You stab %s with your pointed tusks", + "attack_text_npc": "%1$s stabs %2$s with their pointed tusks", + "chance": 22, + "base_damage": { "damage_type": "stab", "amount": 24 } + } + }, + { + "type": "mutation", + "id": "MUT_TANK", + "name": "Immovable", + "points": 2, + "description": "You can survive injuries that would incapacitate humans: you get a 20% bonus to all hit points. Stacks with Tough, etc.", + "social_modifiers": { "intimidate": 2 }, + "prereqs": [ "LARGE_OK", "HUGE_OK", "STR_UP_3", "STR_UP_4", "MASOCHIST_MED" ], + "threshreq": [ "THRESH_MASTODON" ], + "cancels": [ "FLIMSY", "FLIMSY2", "FLIMSY3", "GLASSJAW" ], + "changes_to": [ "MUT_TANK2" ], + "category": [ "MASTODON" ], + "hp_modifier_secondary": 0.2 + }, + { + "type": "mutation", + "id": "MUT_TANK2", + "name": "Unstoppable", + "points": 3, + "description": "Not much scares you. You get a 30% bonus to all hit points. Stacks with Tough, etc.", + "social_modifiers": { "intimidate": 3 }, + "valid": false, + "prereqs": [ "MUT_TANK" ], + "threshreq": [ "THRESH_MASTODON" ], + "cancels": [ "FLIMSY", "FLIMSY2", "FLIMSY3", "GLASSJAW" ], + "changes_to": [ "MUT_TANK3" ], + "category": [ "MASTODON" ], + "hp_modifier_secondary": 0.3 + }, + { + "type": "mutation", + "id": "MUT_TANK3", + "name": "Meatshield", + "points": 4, + "description": "You can simply take the punishment from lesser beings and keep going. You get a 40% bonus to all hit points. Stacks with Tough, etc.", + "social_modifiers": { "intimidate": 4 }, + "valid": false, + "prereqs": [ "MUT_TANK2" ], + "threshreq": [ "THRESH_MASTODON" ], + "cancels": [ "FLIMSY", "FLIMSY2", "FLIMSY3", "GLASSJAW" ], + "category": [ "MASTODON" ], + "hp_modifier_secondary": 0.4 + }, + { + "type": "mutation", + "id": "ELEPHANTINE", + "name": "Elephantine", + "points": 0, + "visibility": 1, + "ugliness": 1, + "mixed_effect": true, + "encumbrance_always": [ [ "TORSO", 10 ], [ "ARM_L", 10 ], [ "ARM_R", 10 ] ], + "description": "You have grown noticeably taller and broader. Much of it is useful muscle mass (Strength +2), but you find it throws off your balance and you get in your own way (+10 torso and arm encumbrance).", + "prereqs": [ "STR_UP", "STR_UP_2", "STR_UP_3", "STR_UP_4" ], + "cancels": [ "SMALL", "SMALL2" ], + "changes_to": [ "ELEPHANTINE_OK", "GIGANTIC" ], + "category": [ "MASTODON" ], + "passive_mods": { "str_mod": 2 }, + "weight_capacity_modifier": 1.05 + }, + { + "type": "mutation", + "id": "ELEPHANTINE_OK", + "name": "Large", + "points": 2, + "visibility": 1, + "description": "You carry your rugged body with the dignity you deserve. Strength +2.", + "prereqs": [ "ELEPHANTINE" ], + "prereqs2": [ "STR_UP", "STR_UP_2", "STR_UP_3", "STR_UP_4" ], + "cancels": [ "SMALL", "SMALL2" ], + "threshreq": [ "THRESH_MASTODON" ], + "changes_to": [ "GIGANTIC" ], + "leads_to": [ "MUT_TANK" ], + "category": [ "MASTODON" ], + "passive_mods": { "str_mod": 2 }, + "weight_capacity_modifier": 1.05 + }, + { + "type": "mutation", + "id": "GIGANTIC", + "name": "Freakishly Gigantic", + "points": -2, + "visibility": 4, + "ugliness": 4, + "mixed_effect": true, + "description": "You have grown even more massive, to the point where you cannot usefully fit into human-sized clothing or vehicles. Much of it is powerful muscle mass (Strength +4), but it's a real pain to haul around.", + "prereqs": [ "ELEPHANTINE", "ELEPHANTINE_OK" ], + "prereqs2": [ "STR_UP_3", "STR_UP_4" ], + "cancels": [ "SMALL", "SMALL2" ], + "changes_to": [ "GIGANTIC_OK" ], + "category": [ "MASTODON" ], + "passive_mods": { "str_mod": 4 }, + "hp_adjustment": -6, + "fatigue_modifier": 0.15, + "restricts_gear": [ "TORSO", "LEG_L", "LEG_R", "ARM_L", "ARM_R", "HAND_L", "HAND_R", "HEAD", "FOOT_L", "FOOT_R" ], + "destroys_gear": true, + "weight_capacity_modifier": 1.1 + }, + { + "type": "mutation", + "id": "GIGANTIC_OK", + "name": "Gigantic", + "points": 2, + "visibility": 4, + "ugliness": 3, + "mixed_effect": true, + "description": "Your cardiovascular system has caught up with your muscular physique, so who needs pathetic human cars? Strength +4.", + "prereqs": [ "ELEPHANTINE" ], + "prereqs2": [ "STR_UP_3", "STR_UP_4" ], + "cancels": [ "SMALL", "SMALL2" ], + "threshreq": [ "THRESH_MASTODON" ], + "leads_to": [ "MUT_TANK" ], + "category": [ "MASTODON" ], + "passive_mods": { "str_mod": 4 }, + "restricts_gear": [ "TORSO", "LEG_L", "LEG_R", "ARM_L", "ARM_R", "HAND_L", "HAND_R", "HEAD", "FOOT_L", "FOOT_R" ], + "destroys_gear": true, + "weight_capacity_modifier": 1.1 + }, + { + "type": "mutation", + "id": "YAKSMELL", + "name": "Terrible Odor", + "points": -2, + "visibility": 4, + "ugliness": 5, + "description": "You smell like exactly like a shaggy elephant would, assuming it sweated, which you do. Monsters that track scent will find you very easily, and humans will react poorly.", + "scent_intensity": 1200, + "prereqs": [ "ELEPHANTINE_SMELL" ], + "leads_to": [ "PHEROMONE_MAMMAL" ], + "category": [ "MASTODON" ] + }, + { + "type": "mutation", + "id": "MINITRUNK", + "name": "Proto Trunk", + "points": -1, + "visibility": 4, + "ugliness": 3, + "description": "Your face and jaw have begun… changing. Masks and such fit OK, but you're noticeably mutated.", + "changes_to": [ "BEAK", "BEAK_HUM", "BEAK_PECK", "PROBOSCIS", "MINOTAUR", "MUZZLE", "MUZZLE_BEAR", "MUZZLE_LONG", "MUZZLE_RAT" ], + "category": [ "MASTODON" ] + }, + { + "type": "mutation", + "id": "TRUNK", + "name": { "str": "Elephant Trunk" }, + "points": -4, + "visibility": 5, + "ugliness": 6, + "mixed_effect": true, + "description": "Your face resembles that of an elephant, with a significant trunk. It looks fierce but prevents wearing mouthgear. Prehensile and able to perform some fine detail work.", + "types": [ "MUZZLE" ], + "prereqs": [ "MINITRUNK" ], + "category": [ "MASTODON" ], + "restricts_gear": [ "MOUTH" ], + "social_modifiers": { "intimidate": 10 }, + "craft_skill_bonus": [ [ "electronics", 1 ], [ "tailor", 1 ], [ "mechanics", 1 ], [ "cooking", 1 ] ] + }, + { + "type": "mutation", + "id": "BIG_FOOD", + "name": "Constant Eater", + "points": -2, + "description": "You require more food than most people, but recover stamina slightly faster.", + "starting_trait": true, + "types": [ "METABOLISM" ], + "changes_to": [ "LARGE_DIET" ], + "category": [ "MASTODON" ], + "metabolism_modifier": 0.5, + "stamina_regen_modifier": 0.1 + }, + { + "type": "mutation", + "id": "LARGE_DIET", + "name": "Large Diet", + "points": -2, + "description": "You require more food than others but your ability to go the distance in both combat and athleticism is expanded.", + "types": [ "HEALING" ], + "cancels": [ "LIGHTEATER", "COLDBLOOD", "COLDBLOOD2", "COLDBLOOD3", "COLDBLOOD4", "WAKEFUL", "WAKEFUL2", "WAKEFUL3" ], + "prereqs": [ "HUNGER" ], + "category": [ "MASTODON" ], + "healing_resting": 0.25, + "fatigue_modifier": 0.75, + "fatigue_regen_modifier": 0.5, + "metabolism_modifier": 0.4 + }, + { + "type": "mutation", + "id": "FLUSH", + "name": "High Thirst", + "points": -2, + "description": "Your body needs more water than usual to flush the denser waste products.", + "starting_trait": true, + "changes_to": [ "H20NEEDS" ], + "cancels": [ "NO_THIRST" ], + "category": [ "MASTODON" ], + "thirst_modifier": 0.5 + }, + { + "type": "mutation", + "id": "H20NEEDS", + "name": "Giant Thirst", + "points": -3, + "description": "Ugh, out of water already? You need about twice the fluids of an average human.", + "prereqs": [ "THIRST" ], + "changes_to": [ "THIRST3" ], + "cancels": [ "NO_THIRST" ], + "category": [ "MASTODON" ], + "thirst_modifier": 1.0 + }, + { + "type": "mutation", + "id": "TRIPAWS", + "name": "Three Fingered", + "points": -3, + "visibility": 3, + "ugliness": 2, + "mixed_effect": true, + "description": "Your hands have fused into three fingered paws. Fine manipulation is a challenge: permanent hand encumbrance of 10, difficulty with delicate craftwork, and your gloves don't fit. But they handle water better.", + "encumbrance_always": [ [ "HAND_L", 10 ], [ "HAND_R", 10 ] ], + "restricts_gear": [ "HAND_L", "HAND_R" ], + "craft_skill_bonus": [ [ "electronics", -2 ], [ "tailor", -2 ], [ "mechanics", -2 ] ], + "types": [ "HANDS" ], + "cancels": [ "TALONS" ], + "category": [ "MASTODON" ] + }, + { + "type": "mutation", + "id": "HERBIVORE", + "copy-from": "HERBIVORE", + "extend": { "category": [ "MASTODON" ] } + }, + { + "type": "mutation", + "id": "DELIBERATE1", + "name": "Ponderous", + "points": -3, + "description": "Your weight must be delicately placed lest the ground give way. You move 10% slower.", + "types": [ "RUNNING" ], + "changes_to": [ "DELIBERATE2" ], + "cancels": [ "FLEET" ], + "category": [ "MASTODON" ], + "movecost_modifier": 1.1 + }, + { + "type": "mutation", + "id": "DELIBERATE2", + "name": "Very Deliberate", + "points": -5, + "description": "Your muscles are quite slow to move. You move 25% slower.", + "types": [ "RUNNING" ], + "prereqs": [ "DELIBERATE1" ], + "changes_to": [ "PONDEROUS3" ], + "cancels": [ "QUICK" ], + "category": [ "MASTODON" ], + "movecost_modifier": 1.25 + }, + { + "type": "mutation", + "id": "TRUMPET", + "name": "Trumpeting Voice", + "points": -1, + "mixed_effect": true, + "description": "You have a trumpeting elephantine voice. threatening NPCs will be easier, but lying will very hard.", + "changes_to": [ "SNARL" ], + "category": [ "MASTODON" ], + "social_modifiers": { "lie": -30, "intimidate": 10 } + }, + { + "type": "mutation", + "id": "THRESH_MASTODON", + "name": { "str": "Killophant" }, + "points": 1, + "description": "Your species was created as the ultimate shock troop. Inherit the earth, pedigree your ancestors, crush the foe.", + "valid": false, + "profession": true, + "purifiable": false, + "threshold": true + } +] diff --git a/data/mods/Aftershock/player/mutations.json b/data/mods/Aftershock/player/mutations/mutations.json similarity index 72% rename from data/mods/Aftershock/player/mutations.json rename to data/mods/Aftershock/player/mutations/mutations.json index 27779daffe650..7ac41ed9799f2 100644 --- a/data/mods/Aftershock/player/mutations.json +++ b/data/mods/Aftershock/player/mutations/mutations.json @@ -21,5 +21,15 @@ "valid": false, "purifiable": false, "profession": true + }, + { + "type": "mutation", + "id": "PrepNet", + "name": "PrepNet Tag", + "points": 0, + "valid": false, + "description": "NPC trait that makes monsters see it as a Prepnet. It is a bug if you have it.", + "player_display": false, + "threshold": true } ] diff --git a/data/mods/Aftershock/player/professions.json b/data/mods/Aftershock/player/professions.json index c1d140062b7a7..dc789e468184d 100644 --- a/data/mods/Aftershock/player/professions.json +++ b/data/mods/Aftershock/player/professions.json @@ -186,5 +186,38 @@ "male": [ "briefs", "collarpin", "diamond_ring" ], "female": [ "panties", "hairpin", "pearl_collar" ] } + }, + { + "type": "profession", + "ident": "afs_mastadon_swat", + "name": "Uplifted Enforcer", + "description": "You are an uplifted elephant hybrid, a precisely engineered enforcer creature created by combining human, elephant and mastodon DNA. Unlike most of your war-minded kin, you sought a peaceful retirement after completing your compulsive service period, and even earned the right to be considered a full citizen. Now, with the end of the world in the horizon, it seems that your combat skills might come useful once again.", + "points": 13, + "skills": [ + { "level": 6, "name": "gun" }, + { "level": 4, "name": "shotgun" }, + { "level": 2, "name": "pistol" }, + { "level": 3, "name": "melee" }, + { "level": 3, "name": "bashing" } + ], + "traits": [ "PROF_SWAT", "UPLIFTED", "THRESH_MASTODON", "MUT_TANK", "TUSKS" ], + "//": "Placeholder profession until mutant NPCs merged and post thresh MASTODON distribution table can be added. Need to add XL gear for MASTODON's in more items.", + "items": { + "both": { + "items": [ "socks", "swat_armor", "tac_fullhelmet", "boots_combat", "gloves_tactical", "badge_swat", "wristwatch" ], + "entries": [ + { "group": "charged_two_way_radio" }, + { "item": "ear_plugs", "custom-flags": [ "no_auto_equip" ] }, + { "item": "bandolier_shotgun", "contents-group": "bandolier_swat_cqc1" }, + { "item": "bandolier_shotgun", "contents-group": "bandolier_swat_cqc2" }, + { "item": "legpouch_large", "contents-group": "army_mags_usp9" }, + { "item": "usp_9mm", "ammo-item": "9mmfmj", "charges": 15, "container-item": "sholster" }, + { "item": "baton-extended", "container-item": "police_belt" }, + { "item": "ksg", "ammo-item": "shot_00", "charges": 7, "contents-item": "shoulder_strap" } + ] + }, + "male": [ "boxer_shorts" ], + "female": [ "sports_bra", "boy_shorts" ] + } } ] diff --git a/data/mods/Aftershock/recipes/mutagens.json b/data/mods/Aftershock/recipes/mutagens.json new file mode 100644 index 0000000000000..97f5f3e483069 --- /dev/null +++ b/data/mods/Aftershock/recipes/mutagens.json @@ -0,0 +1,63 @@ +[ + { + "type": "recipe", + "result": "mutagen_mastodon", + "category": "CC_CHEM", + "subcategory": "CSC_CHEM_MUTAGEN", + "skill_used": "cooking", + "skills_required": [ "firstaid", 6 ], + "difficulty": 10, + "time": 120000, + "tools": [ [ [ "surface_heat", 30, "LIST" ] ] ], + "book_learn": [ [ "recipe_uplift", 9 ] ], + "qualities": [ { "id": "CHEM", "level": 3 } ], + "components": [ [ [ "mutagen", 1 ] ], [ [ "afs_biomaterial_3", 3 ] ], [ [ "slime_scrap", 5 ], [ "afs_biomaterial_5", 1 ] ] ] + }, + { + "type": "recipe", + "result": "iv_mutagen_mastodon", + "category": "CC_CHEM", + "subcategory": "CSC_CHEM_MUTAGEN", + "skill_used": "cooking", + "skills_required": [ "firstaid", 6 ], + "difficulty": 10, + "time": 120000, + "tools": [ [ [ "surface_heat", 30, "LIST" ] ] ], + "book_learn": [ [ "recipe_uplift", 9 ] ], + "qualities": [ { "id": "CHEM", "level": 3 } ], + "components": [ + [ [ "mutagen", 3 ] ], + [ [ "afs_biomaterial_3", 3 ] ], + [ [ "mutagen_medical", 1 ], [ "afs_biomaterial_5", 1 ] ], + [ [ "syringe", 1 ] ] + ] + }, + { + "type": "recipe", + "result": "mutagen_migo", + "category": "CC_CHEM", + "subcategory": "CSC_CHEM_MUTAGEN", + "skill_used": "cooking", + "skills_required": [ "firstaid", 6 ], + "difficulty": 10, + "time": 120000, + "tools": [ [ [ "surface_heat", 30, "LIST" ] ] ], + "book_learn": [ [ "millyficents_diary", 9 ] ], + "qualities": [ { "id": "CHEM", "level": 3 } ], + "components": [ [ [ "mutagen", 1 ] ], [ [ "afs_biomaterial_3", 3 ] ], [ [ "resin_chunk", 5 ] ] ] + }, + { + "type": "recipe", + "result": "iv_mutagen_migo", + "category": "CC_CHEM", + "subcategory": "CSC_CHEM_MUTAGEN", + "skill_used": "cooking", + "skills_required": [ "firstaid", 6 ], + "difficulty": 10, + "time": 120000, + "tools": [ [ [ "surface_heat", 30, "LIST" ] ] ], + "book_learn": [ [ "millyficents_diary", 9 ] ], + "qualities": [ { "id": "CHEM", "level": 3 } ], + "components": [ [ [ "mutagen_migo", 2 ] ], [ [ "afs_biomaterial_1", 4 ] ], [ [ "syringe", 1 ] ] ] + } +] diff --git a/data/mods/DinoMod/dinosaur.json b/data/mods/DinoMod/dinosaur.json index f061b4bf3cc9e..894cdb7bc0681 100644 --- a/data/mods/DinoMod/dinosaur.json +++ b/data/mods/DinoMod/dinosaur.json @@ -97,6 +97,48 @@ "fear_triggers": [ "SOUND", "PLAYER_CLOSE", "HURT", "FIRE" ], "categories": [ "DINOSAUR" ] }, + { + "type": "MONSTER", + "id": "mon_pachycephalosaurus", + "name": { "str": "Pachycephalosaurus", "str_pl": "Pachycephalosaurus" }, + "species": "DINOSAUR", + "default_faction": "pachycephalosaurus", + "symbol": "D", + "color": "light_green_yellow", + "volume": "450000 ml", + "weight": "450 kg", + "material": "flesh", + "aggression": -40, + "morale": -10, + "speed": 150, + "melee_skill": 4, + "melee_dice": 1, + "melee_dice_sides": 4, + "dodge": 3, + "armor_bash": 2, + "armor_cut": 1, + "hp": 40, + "death_function": [ "NORMAL" ], + "description": "A feathered bipedal dinosaur, standing as tall as a human. It looks like a reptilian ostrich with a round hard-looking domed head.", + "reproduction": { "baby_egg": "egg_pachycephalosaurus", "baby_count": 3, "baby_timer": 12 }, + "baby_flags": [ "SPRING", "SUMMER" ], + "biosignature": { "biosig_item": "feces_bird", "biosig_timer": 3 }, + "flags": [ + "SEES", + "SMELLS", + "HEARS", + "GOODHEARING", + "ANIMAL", + "PATH_AVOID_DANGER_1", + "PET_MOUNTABLE", + "CATTLEFODDER", + "PET_WONT_FOLLOW", + "WARM" + ], + "harvest": "dino_feather_leather", + "fear_triggers": [ "SOUND", "PLAYER_CLOSE", "HURT", "FIRE" ], + "categories": [ "DINOSAUR" ] + }, { "type": "MONSTER", "id": "mon_spinosaurus", @@ -595,6 +637,13 @@ "name": "light green and yellow hatchling", "upgrades": { "age_grow": 20, "into": "mon_gallimimus" } }, + { + "id": "mon_pachycephalosaurus_hatchling", + "type": "MONSTER", + "copy-from": "mon_compsognathus_hatchling", + "name": "light green and yellow hatchling", + "upgrades": { "age_grow": 20, "into": "mon_pachycephalosaurus" } + }, { "id": "mon_spinosaurus_hatchling", "type": "MONSTER", @@ -686,6 +735,7 @@ "monsters": [ { "monster": "mon_compsognathus", "freq": 100, "cost_multiplier": 0, "pack_size": [ 4, 12 ] }, { "monster": "mon_gallimimus", "freq": 50, "cost_multiplier": 0, "pack_size": [ 4, 8 ] }, + { "monster": "mon_pachycephalosaurus", "freq": 25, "cost_multiplier": 0, "pack_size": [ 1, 2 ] }, { "monster": "mon_spinosaurus", "freq": 1, "cost_multiplier": 50 }, { "monster": "mon_tyrannosaurus", "freq": 1, "cost_multiplier": 40 }, { "monster": "mon_triceratops", "freq": 3, "cost_multiplier": 30, "pack_size": [ 1, 2 ] }, @@ -763,6 +813,13 @@ "pack_size": [ 4, 8 ], "conditions": [ "SPRING", "SUMMER", "AUTUMN" ] }, + { + "monster": "mon_pachycephalosaurus", + "freq": 10, + "cost_multiplier": 0, + "pack_size": [ 1, 2 ], + "conditions": [ "SPRING", "SUMMER", "AUTUMN" ] + }, { "monster": "mon_stegosaurus", "freq": 10, diff --git a/data/mods/DinoMod/egg.json b/data/mods/DinoMod/egg.json index e92131e9cd3cf..314370df84825 100644 --- a/data/mods/DinoMod/egg.json +++ b/data/mods/DinoMod/egg.json @@ -33,6 +33,12 @@ "name": "gallimimus egg", "copy-from": "egg_dino" }, + { + "type": "COMESTIBLE", + "id": "egg_pachycephalosaurus", + "name": "pachycephalosaurus egg", + "copy-from": "egg_dino" + }, { "type": "COMESTIBLE", "id": "egg_spinosaurus", @@ -99,6 +105,12 @@ "name": "parasaurolophus egg", "copy-from": "egg_dino" }, + { + "type": "COMESTIBLE", + "id": "egg_dimorphodon", + "name": "dimorphodon egg", + "copy-from": "egg_dino" + }, { "type": "COMESTIBLE", "id": "egg_dilophosaurus", diff --git a/data/mods/EW_Pack/ew_weapons.json b/data/mods/EW_Pack/ew_weapons.json index f11fdbe806a49..152692c6f1937 100644 --- a/data/mods/EW_Pack/ew_weapons.json +++ b/data/mods/EW_Pack/ew_weapons.json @@ -38,7 +38,7 @@ "magazines": [ [ "654", [ "svs24_robomag", "svs24_robodrum" ] ], [ "545x39", [ "cw24_robomag", "cw24_bigrobomag", "ak74mag" ] ], - [ "762", [ "akmmag", "akmbigmag" ] ] + [ "762", [ "akmag30", "akmag10", "akmag20", "akmag40", "akdrum75" ] ] ] }, { @@ -104,7 +104,7 @@ ], "magazines": [ [ "545x39", [ "cw24_robomag", "cw24_bigrobomag" ] ], - [ "762", [ "akmmag", "akmbigmag" ] ], + [ "762", [ "akmag30", "akmag10", "akmag20", "akmag40", "akdrum75" ] ], [ "654", [ "svs24_robomag", "svs24_robodrum" ] ] ] }, @@ -130,7 +130,7 @@ "price": 160000, "ammo": "762", "magazines": [ - [ "762", [ "akmmag", "akmbigmag" ] ], + [ "762", [ "akmag30", "akmag10", "akmag20", "akmag40", "akdrum75" ] ], [ "545x39", [ "cw24_robomag", "cw24_bigrobomag" ] ], [ "654", [ "svs24_robomag", "svs24_robodrum" ] ] ] diff --git a/data/mods/Generic_Guns/firearms/gg_firearms_migration.json b/data/mods/Generic_Guns/firearms/gg_firearms_migration.json index 4437d1688121a..3def752d7090f 100644 --- a/data/mods/Generic_Guns/firearms/gg_firearms_migration.json +++ b/data/mods/Generic_Guns/firearms/gg_firearms_migration.json @@ -56,7 +56,7 @@ "replace": "pistol_machine" }, { - "id": [ "deagle_44", "m1911-460" ], + "id": [ "deagle_44", "m1911-460", "draco" ], "type": "MIGRATION", "replace": "pistol_magnum_automag" }, @@ -262,7 +262,8 @@ "m1a", "sks", "mosin44", - "famas" + "famas", + "aksemi" ], "type": "MIGRATION", "replace": "rifle_sporter" diff --git a/data/mods/Generic_Guns/magazines/gg_magazines_migration.json b/data/mods/Generic_Guns/magazines/gg_magazines_migration.json index 97c055f37d299..3ab6550d2d14b 100644 --- a/data/mods/Generic_Guns/magazines/gg_magazines_migration.json +++ b/data/mods/Generic_Guns/magazines/gg_magazines_migration.json @@ -161,8 +161,11 @@ "ar10mag_20rd", "ak74mag", "rpk74mag", - "akmbigmag", - "akmmag", + "akmag10", + "akmag20", + "akmag30", + "akmag40", + "akdrum75", "8x40_100_mag", "8x40_250_mag", "8x40_25_mag", diff --git a/data/mods/Graphical_Overmap/go_overmap_terrain_transportation.json b/data/mods/Graphical_Overmap/go_overmap_terrain_transportation.json index eb56c1387602a..0f32d94ad32b6 100644 --- a/data/mods/Graphical_Overmap/go_overmap_terrain_transportation.json +++ b/data/mods/Graphical_Overmap/go_overmap_terrain_transportation.json @@ -165,7 +165,13 @@ }, { "type": "overmap_terrain", - "id": "trailhead", + "id": [ "trailhead", "trailhead_shack_z0", "trailhead_outhouse_z0" ], + "copy-from": "trailhead", + "sym": "\u00F1" + }, + { + "type": "overmap_terrain", + "id": [ "trailhead_shack_z1", "trailhead_outhouse_z1" ], "copy-from": "trailhead", "sym": "\u00F1" }, diff --git a/data/mods/Magiclysm/Spells/kelvinist.json b/data/mods/Magiclysm/Spells/kelvinist.json index cc414c462666a..035541698e997 100644 --- a/data/mods/Magiclysm/Spells/kelvinist.json +++ b/data/mods/Magiclysm/Spells/kelvinist.json @@ -271,7 +271,7 @@ "description": "Covers you in a thin layer of magical ice to protect you from harm.", "valid_targets": [ "self" ], "flags": [ "NO_LEGS", "CONCENTRATE", "VERBAL", "SOMATIC" ], - "effect": "target_attack", + "effect": "spawn_item", "effect_str": "armor_frost", "affected_body_parts": [ "HEAD", "TORSO", "LEG_L", "LEG_R", "ARM_R", "ARM_L" ], "energy_source": "MANA", diff --git a/data/mods/Magiclysm/effects/effects.json b/data/mods/Magiclysm/effects/effects.json index ce71d1c2717f7..6b5cee401c516 100644 --- a/data/mods/Magiclysm/effects/effects.json +++ b/data/mods/Magiclysm/effects/effects.json @@ -60,17 +60,6 @@ "rating": "good", "base_mods": { "per_mod": [ 2 ], "dex_mod": [ 2 ], "str_mod": [ 2, 2 ], "speed_mod": [ 20 ] } }, - { - "type": "effect_type", - "id": "armor_frost", - "name": [ "Frost Armor" ], - "desc": [ "Covers you in a thin layer of magical ice to protect you from harm." ], - "apply_message": "You are protected by Frost Armor.", - "remove_message": "Your Frost Armor melts away.", - "rating": "good", - "show_in_info": true, - "base_mods": { } - }, { "type": "effect_type", "id": "bio_boost", diff --git a/data/mods/Magiclysm/items/ethereal_items.json b/data/mods/Magiclysm/items/ethereal_items.json index 8bbc1cde4cc5b..45b4b9b62ab9c 100644 --- a/data/mods/Magiclysm/items/ethereal_items.json +++ b/data/mods/Magiclysm/items/ethereal_items.json @@ -386,6 +386,25 @@ "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "ARMOR_ACID", "multiply": -0.6 } ] } ] } }, + { + "id": "armor_frost", + "type": "ARMOR", + "category": "armor", + "name": { "str": "frost armor", "str_pl": "frost armor" }, + "description": "A thin layer of magical ice, covering the entire body.", + "weight": "5000 g", + "volume": "5 L", + "material": [ "steel" ], + "symbol": "[", + "color": "light_gray", + "covers": [ "HEAD", "MOUTH", "EYES", "TORSO", "ARMS", "HANDS", "LEGS", "FEET" ], + "coverage": 100, + "encumbrance": 10, + "warmth": 0, + "material_thickness": 2, + "environmental_protection": 2, + "flags": [ "ONLY_ONE", "OVERSIZE", "PERSONAL", "STURDY" ] + }, { "id": "aura_stoneskin", "type": "ARMOR", diff --git a/data/mods/More_Locations/refugee_faction/refugee_classes.json b/data/mods/More_Locations/refugee_faction/refugee_classes.json index 218cd7b421d71..e7bae76cae5a4 100644 --- a/data/mods/More_Locations/refugee_faction/refugee_classes.json +++ b/data/mods/More_Locations/refugee_faction/refugee_classes.json @@ -26,7 +26,6 @@ [ "JITTERY", 10 ], [ "BADKNEES", 10 ], [ "SLOWRUNNER", 10 ], - [ "TRIGGERHAPPY", 10 ], [ "FLIMSY", 10 ], { "group": "Appearance_demographics", "prob": 100 } ], diff --git a/data/mods/Mutant_NPCs/trait_groups.json b/data/mods/Mutant_NPCs/trait_groups.json index c8b08a0792f54..57f0a4cfc5723 100644 --- a/data/mods/Mutant_NPCs/trait_groups.json +++ b/data/mods/Mutant_NPCs/trait_groups.json @@ -917,7 +917,6 @@ { "trait": "SAVANT", "prob": 10 }, { "trait": "SCHIZOPHRENIC", "prob": 10 }, { "trait": "SQUEAMISH", "prob": 10 }, - { "trait": "TRIGGERHAPPY", "prob": 10 }, { "group": "Appearance_demographics", "prob": 100 } ] } diff --git a/data/mods/desert_region/desert_regional_map_settings.json b/data/mods/desert_region/desert_regional_map_settings.json index 5da5923be8a77..303a32c2cb112 100644 --- a/data/mods/desert_region/desert_regional_map_settings.json +++ b/data/mods/desert_region/desert_regional_map_settings.json @@ -410,7 +410,8 @@ "trail_width_offset_min": 1, "trail_width_offset_max": 3, "clear_trail_terrain": false, - "trail_terrain": { "t_dirt": 1 } + "trail_terrain": { "t_dirt": 1 }, + "trailheads": { "trailhead_basic": 1, "trailhead_outhouse": 1, "trailhead_shack": 1 } }, "map_extras": { "forest": { diff --git a/data/mods/rural_biome/rural_regional_map_settings.json b/data/mods/rural_biome/rural_regional_map_settings.json index 7cb13ff1d277c..c254c1cc0fbc3 100644 --- a/data/mods/rural_biome/rural_regional_map_settings.json +++ b/data/mods/rural_biome/rural_regional_map_settings.json @@ -345,7 +345,8 @@ "trail_width_offset_min": 1, "trail_width_offset_max": 3, "clear_trail_terrain": false, - "trail_terrain": { "t_dirt": 1 } + "trail_terrain": { "t_dirt": 1 }, + "trailheads": { "trailhead_basic": 1, "trailhead_outhouse": 1, "trailhead_shack": 1 } }, "map_extras": { "forest": { diff --git a/data/raw/keybindings.json b/data/raw/keybindings.json index fa568b7b1a8a0..421572bf11fff 100644 --- a/data/raw/keybindings.json +++ b/data/raw/keybindings.json @@ -1057,9 +1057,9 @@ }, { "type": "keybinding", - "id": "PICK_RANDOM_NAME", + "id": "RANDOMIZE_CHAR_DESCRIPTION", "category": "NEW_CHAR_DESCRIPTION", - "name": "Pick random character name", + "name": "Pick random character description", "bindings": [ { "input_method": "keyboard", "key": "*" } ] }, { @@ -2889,5 +2889,26 @@ { "input_method": "keyboard", "key": "SPACE" }, { "input_method": "keyboard", "key": "RETURN" } ] + }, + { + "type": "keybinding", + "id": "CREATURE", + "category": "EXTENDED_DESCRIPTION", + "name": "Describe creature", + "bindings": [ { "input_method": "keyboard", "key": "c" } ] + }, + { + "type": "keybinding", + "id": "FURNITURE", + "category": "EXTENDED_DESCRIPTION", + "name": "Describe furniture", + "bindings": [ { "input_method": "keyboard", "key": "f" } ] + }, + { + "type": "keybinding", + "id": "TERRAIN", + "category": "EXTENDED_DESCRIPTION", + "name": "Describe terrain", + "bindings": [ { "input_method": "keyboard", "key": "t" } ] } ] diff --git a/doc/COMPILING/COMPILING.md b/doc/COMPILING/COMPILING.md index 6d785a93d1b72..6ab70af98c38c 100644 --- a/doc/COMPILING/COMPILING.md +++ b/doc/COMPILING/COMPILING.md @@ -449,11 +449,6 @@ ncurses (with wide character support enabled) and gettext are needed if you want For Homebrew: brew install gettext ncurses - brew link --force gettext ncurses - -Then, after compiling, be sure to unlink these libraries to prevent conflicts with the OS X shared libraries: - - brew unlink gettext ncurses For MacPorts: @@ -493,6 +488,7 @@ The Cataclysm source is compiled using `make`. * `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. * `LOCALIZE=0` disable localization (to get around possible `gettext` errors if it is not setup correctly); omit to use `gettext`. +* `BREWGETTEXT=1` set this if you don't set LOCALIZE=0 and have installed `gettext` from homebrew--homebrew will refuse to link gettext in recent versions. * `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++. diff --git a/doc/REGION_SETTINGS.md b/doc/REGION_SETTINGS.md index 165c1fc996667..4781f29931c00 100644 --- a/doc/REGION_SETTINGS.md +++ b/doc/REGION_SETTINGS.md @@ -370,6 +370,7 @@ trailheads, and some general tuning of the actual trail width/position in mapgen | `trail_width_offset_max` | Trail width is mapgen offset by `rng(trail_width_offset_min, trail_width_offset_max)`. | | `clear_trail_terrain` | Clear all previously defined `trail_terrain`. | | `trail_terrain` | Weighted list of terrain that will used for the trail. | +| `trailheads` | Weighted list of overmap specials / city buildings that will be placed as trailheads. | ### Example @@ -390,6 +391,9 @@ trailheads, and some general tuning of the actual trail width/position in mapgen "clear_trail_terrain": false, "trail_terrain": { "t_dirt": 1 + }, + "trailheads": { + "trailhead_basic": 50 } } } diff --git a/gfx/BrownLikeBears/tile_config.json b/gfx/BrownLikeBears/tile_config.json index 54c88fc152901..e11150143258f 100644 --- a/gfx/BrownLikeBears/tile_config.json +++ b/gfx/BrownLikeBears/tile_config.json @@ -1 +1,7015 @@ -{"tile_info": [{"width": 20, "height": 20}], "tiles-new": [{"file": "tiles.png", "tiles": [{"id": "npc_female", "fg": 4, "rotates": false}, {"id": "npc_male", "fg": 3, "rotates": false}, {"id": "player_female", "fg": 2, "rotates": false}, {"id": "player_male", "fg": 1, "rotates": false}, {"id": "overlay_female_mutation_BEAUTIFUL2", "fg": 27, "rotates": false}, {"id": "overlay_female_mutation_BEAUTIFUL3", "fg": 27, "rotates": false}, {"id": "overlay_female_mutation_BEAUTIFUL", "fg": 27, "rotates": false}, {"id": "overlay_female_mutation_PRETTY", "fg": 27, "rotates": false}, {"id": "overlay_mutation_ANTENNAE", "fg": 26, "rotates": false}, {"id": "overlay_mutation_ANTLERS", "fg": 25, "rotates": false}, {"id": "overlay_mutation_ARACHNID_ARMS", "fg": 24, "rotates": false}, {"id": "overlay_mutation_ARACHNID_ARMS_OK", "fg": 24, "rotates": false}, {"id": "overlay_mutation_ARM_TENTACLES", "fg": 24, "rotates": false}, {"id": "overlay_mutation_ARM_TENTACLES_4", "fg": 24, "rotates": false}, {"id": "overlay_mutation_ARM_TENTACLES_8", "fg": 24, "rotates": false}, {"id": "overlay_mutation_BEAK", "fg": 23, "rotates": false}, {"id": "overlay_mutation_BEAK_HUM", "fg": 23, "rotates": false}, {"id": "overlay_mutation_BEAK_PECK", "fg": 23, "rotates": false}, {"id": "overlay_mutation_BURROW", "fg": 22, "rotates": false}, {"id": "overlay_mutation_CANINE_EARS", "fg": 7, "rotates": false}, {"id": "overlay_mutation_CHITIN2", "fg": 20, "rotates": false}, {"id": "overlay_mutation_CHITIN3", "fg": 20, "rotates": false}, {"id": "overlay_mutation_CHITIN", "fg": 20, "rotates": false}, {"id": "overlay_mutation_CHITIN_FUR2", "fg": 20, "rotates": false}, {"id": "overlay_mutation_CHITIN_FUR3", "fg": 20, "rotates": false}, {"id": "overlay_mutation_CHITIN_FUR", "fg": 20, "rotates": false}, {"id": "overlay_mutation_CLAWS", "fg": 21, "rotates": false}, {"id": "overlay_mutation_CLAWS_RAT", "fg": 21, "rotates": false}, {"id": "overlay_mutation_CLAWS_RETRACT", "fg": 21, "rotates": false}, {"id": "overlay_mutation_CLAWS_ST", "fg": 21, "rotates": false}, {"id": "overlay_mutation_CLAWS_TENTACLE", "fg": 24, "rotates": false}, {"id": "overlay_mutation_DEFORMED2", "fg": 16, "rotates": false}, {"id": "overlay_mutation_DEFORMED3", "fg": 16, "rotates": false}, {"id": "overlay_mutation_DEFORMED", "fg": 16, "rotates": false}, {"id": "overlay_mutation_DOWN", "fg": 16, "rotates": false}, {"id": "overlay_mutation_ELFA_EARS", "fg": 6, "rotates": false}, {"id": "overlay_mutation_FANGS", "fg": 13, "rotates": false}, {"id": "overlay_mutation_FANGS_SPIDER", "fg": 13, "rotates": false}, {"id": "overlay_mutation_FEATHERS", "fg": 15, "rotates": false}, {"id": "overlay_mutation_FELINE_EARS", "fg": 5, "rotates": false}, {"id": "overlay_mutation_FELINE_FUR", "fg": 19, "rotates": false}, {"id": "overlay_mutation_FUR", "fg": 19, "rotates": false}, {"id": "overlay_mutation_HORNS", "fg": 12, "rotates": false}, {"id": "overlay_mutation_HORNS_CURLED", "fg": 12, "rotates": false}, {"id": "overlay_mutation_HORNS_POINTED", "fg": 12, "rotates": false}, {"id": "overlay_mutation_INFRARED", "fg": 14, "rotates": false}, {"id": "overlay_mutation_INSECT_ARMS", "fg": 24, "rotates": false}, {"id": "overlay_mutation_INSECT_ARMS_OK", "fg": 24, "rotates": false}, {"id": "overlay_mutation_LEG_TENTACLES", "fg": 11, "rotates": false}, {"id": "overlay_mutation_LIZ_EYE", "fg": 14, "rotates": false}, {"id": "overlay_mutation_LYNX_FUR", "fg": 19, "rotates": false}, {"id": "overlay_mutation_MUZZLE_LONG", "fg": 17, "rotates": false}, {"id": "overlay_mutation_NAILS", "fg": 21, "rotates": false}, {"id": "overlay_mutation_NIGHTVISION3", "fg": 14, "rotates": false}, {"id": "overlay_mutation_RADIOACTIVE2", "fg": 10, "rotates": false}, {"id": "overlay_mutation_RADIOACTIVE3", "fg": 9, "rotates": false}, {"id": "overlay_mutation_SCALES", "fg": 15, "rotates": false}, {"id": "overlay_mutation_SLEEK_SCALES", "fg": 15, "rotates": false}, {"id": "overlay_mutation_SLIME_HANDS", "fg": 24, "rotates": false}, {"id": "overlay_mutation_SLIMY", "fg": 18, "rotates": false}, {"id": "overlay_mutation_SNOUT", "fg": 17, "rotates": false}, {"id": "overlay_mutation_TAIL_CATTLE", "fg": 8, "rotates": false}, {"id": "overlay_mutation_TAIL_CLUB", "fg": 8, "rotates": false}, {"id": "overlay_mutation_TAIL_LONG", "fg": 8, "rotates": false}, {"id": "overlay_mutation_TAIL_RAPTOR", "fg": 8, "rotates": false}, {"id": "overlay_mutation_TAIL_RAT", "fg": 8, "rotates": false}, {"id": "overlay_mutation_TAIL_STING", "fg": 8, "rotates": false}, {"id": "overlay_mutation_TAIL_STUB", "fg": 8, "rotates": false}, {"id": "overlay_mutation_TAIL_THICK", "fg": 8, "rotates": false}, {"id": "overlay_mutation_THICK_SCALES", "fg": 15, "rotates": false}, {"id": "overlay_mutation_URSINE_FUR", "fg": 19, "rotates": false}, {"id": "overlay_mutation_WHISKERS", "fg": 30, "rotates": false}, {"id": "overlay_mutation_WINGS_BAT", "fg": 29, "rotates": false}, {"id": "overlay_mutation_WINGS_BIRD", "fg": 29, "rotates": false}, {"id": "overlay_mutation_WINGS_BUTTERFLY", "fg": 29, "rotates": false}, {"id": "overlay_mutation_WINGS_INSECT", "fg": 28, "rotates": false}, {"id": "overlay_mutation_WINGS_STUB", "fg": 28, "rotates": false}, {"id": "overlay_mutation_BIOLUM1", "fg": 31, "rotates": false}, {"id": "overlay_mutation_BIOLUM2", "fg": 32, "rotates": false}, {"id": "overlay_mutation_CEPH_EYES", "fg": 33, "rotates": false}, {"id": "overlay_mutation_CHITIN", "fg": 34, "rotates": false}, {"id": "overlay_mutation_ELFAEYES", "fg": 35, "rotates": false}, {"id": "overlay_female_mutation_FLOWERS", "fg": 36, "rotates": false}, {"id": "overlay_mutation_FLOWERS", "fg": 37, "rotates": false}, {"id": "overlay_mutation_SCALES", "fg": 38, "rotates": false}, {"id": "overlay_female_mutation_TERRIFYING", "fg": 39, "rotates": false}, {"id": "overlay_mutation_TERRIFYING", "fg": 40, "rotates": false}, {"id": "overlay_worn_10gal_hat", "fg": 79, "rotates": false}, {"id": "overlay_worn_apron_leather", "fg": 76, "rotates": false}, {"id": "overlay_worn_armor_plate", "fg": 136, "rotates": false}, {"id": "overlay_worn_armor_samurai", "fg": 77, "rotates": false}, {"id": "overlay_worn_army_top", "fg": 62, "rotates": false}, {"id": ["overlay_worn_backpack", "overlay_worn_runner_bag", "overlay_worn_backpack_leather", "overlay_worn_survivor_pack", "overlay_worn_survivor_runner_pack", "overlay_worn_survivor_duffel_bag", "overlay_worn_survivor_rucksack", "overlay_worn_mbag"], "fg": 65, "rotates": false}, {"id": "overlay_worn_bandana", "fg": 101, "rotates": false}, {"id": ["overlay_worn_beret", "overlay_worn_beret_wool"], "fg": 50, "rotates": false}, {"id": "overlay_worn_bondage_mask", "fg": 106, "rotates": false}, {"id": "overlay_worn_bondage_suit", "fg": 105, "rotates": false}, {"id": "overlay_worn_chestrig", "fg": 42, "rotates": false}, {"id": "overlay_worn_clown_suit", "fg": 95, "rotates": false}, {"id": "overlay_worn_coat_lab", "fg": 122, "rotates": false}, {"id": "overlay_worn_coat_winter", "fg": 127, "rotates": false}, {"id": "overlay_worn_corset", "fg": 107, "rotates": false}, {"id": "overlay_worn_cowboy_hat", "fg": 80, "rotates": false}, {"id": "overlay_worn_cowl_wool", "fg": 98, "rotates": false}, {"id": "overlay_worn_dress", "fg": 45, "rotates": false}, {"id": "overlay_worn_dress_shirt", "fg": 131, "rotates": false}, {"id": "overlay_worn_dress_wedding", "fg": 66, "rotates": false}, {"id": "overlay_worn_entry_suit", "fg": 135, "rotates": false}, {"id": "overlay_worn_fancy_sunglasses", "fg": 53, "rotates": false}, {"id": "overlay_worn_fedora", "fg": 81, "rotates": false}, {"id": "overlay_worn_flag_shirt", "fg": 94, "rotates": false}, {"id": "overlay_worn_football_armor", "fg": 72, "rotates": false}, {"id": ["overlay_worn_glasses_eye", "overlay_worn_glasses_reading", "overlay_worn_glasses_bifocal"], "fg": 52, "rotates": false}, {"id": "overlay_worn_glasses_monocle", "fg": 115, "rotates": false}, {"id": "overlay_worn_glasses_safety", "fg": 54, "rotates": false}, {"id": ["overlay_worn_goggles_ir_on", "overlay_worn_goggles_ir"], "fg": 55, "rotates": false}, {"id": ["overlay_worn_goggles_nv_on", "overlay_worn_goggles_nv"], "fg": 57, "rotates": false}, {"id": "overlay_worn_goggles_welding", "fg": 56, "rotates": false}, {"id": "overlay_worn_greatcoat", "fg": 43, "rotates": false}, {"id": "overlay_worn_hat_ball", "fg": 69, "rotates": false}, {"id": "overlay_worn_hat_chef", "fg": 46, "rotates": false}, {"id": "overlay_worn_hat_cotton", "fg": 114, "rotates": false}, {"id": "overlay_worn_hat_hard", "fg": 120, "rotates": false}, {"id": "overlay_worn_hat_hunting", "fg": 83, "rotates": false}, {"id": "overlay_worn_hat_noise_cancelling", "fg": 104, "rotates": false}, {"id": "overlay_worn_hazmat_suit", "fg": 103, "rotates": false}, {"id": "overlay_worn_headgear", "fg": 71, "rotates": false}, {"id": "overlay_worn_helmet_army", "fg": 141, "rotates": false}, {"id": "overlay_worn_helmet_ball", "fg": 74, "rotates": false}, {"id": "overlay_worn_helmet_barbute", "fg": 137, "rotates": false}, {"id": "overlay_worn_helmet_bike", "fg": 126, "rotates": false}, {"id": "overlay_worn_helmet_football", "fg": 73, "rotates": false}, {"id": "overlay_worn_helmet_kabuto", "fg": 78, "rotates": false}, {"id": "overlay_worn_helmet_lobster", "fg": 48, "rotates": false}, {"id": "overlay_worn_helmet_motor", "fg": 113, "rotates": false}, {"id": "overlay_worn_helmet_plate", "fg": 138, "rotates": false}, {"id": "overlay_worn_helmet_riot", "fg": 139, "rotates": false}, {"id": "overlay_worn_helmet_skid", "fg": 123, "rotates": false}, {"id": "overlay_worn_helmet_survivor", "fg": 139, "rotates": false}, {"id": "overlay_worn_helmet_xlsurvivor", "fg": 139, "rotates": false}, {"id": ["overlay_worn_hoodie", "overlay_worn_wool_hoodie"], "fg": 60, "rotates": false}, {"id": "overlay_worn_house_coat", "fg": 96, "rotates": false}, {"id": "overlay_worn_jacket_army", "fg": 51, "rotates": false}, {"id": "overlay_worn_jacket_flannel", "fg": 82, "rotates": false}, {"id": "overlay_worn_jacket_jean", "fg": 109, "rotates": false}, {"id": ["overlay_worn_jacket_leather", "overlay_worn_jacket_leather_mod", "overlay_worn_jacket_windbreaker"], "fg": 112, "rotates": false}, {"id": "overlay_worn_jacket_light", "fg": 110, "rotates": false}, {"id": "overlay_worn_jersey", "fg": 75, "rotates": false}, {"id": ["overlay_worn_judo_belt_black", "overlay_worn_obi_gi"], "fg": 85, "rotates": false}, {"id": "overlay_worn_judo_belt_blue", "fg": 87, "rotates": false}, {"id": "overlay_worn_judo_belt_brown", "fg": 86, "rotates": false}, {"id": "overlay_worn_judo_belt_green", "fg": 88, "rotates": false}, {"id": "overlay_worn_judo_belt_orange", "fg": 89, "rotates": false}, {"id": "overlay_worn_judo_belt_white", "fg": 91, "rotates": false}, {"id": "overlay_worn_judo_belt_yellow", "fg": 90, "rotates": false}, {"id": ["overlay_worn_jumpsuit_xl", "overlay_worn_jumpsuit"], "fg": 84, "rotates": false}, {"id": ["overlay_worn_karate_gi", "overlay_worn_judo_gi"], "fg": 92, "rotates": false}, {"id": "overlay_worn_kevlar", "fg": 111, "rotates": false}, {"id": "overlay_worn_knit_scarf", "fg": 140, "rotates": false}, {"id": "overlay_worn_knit_scarf_loose", "fg": 140, "rotates": false}, {"id": "overlay_worn_kufi", "fg": 44, "rotates": false}, {"id": "overlay_worn_linuxtshirt", "fg": 134, "rotates": false}, {"id": "overlay_worn_longshirt", "fg": 130, "rotates": false}, {"id": "overlay_worn_long_knit_scarf", "fg": 140, "rotates": false}, {"id": "overlay_worn_long_knit_scarf_loose", "fg": 140, "rotates": false}, {"id": "overlay_worn_long_patchwork_scarf", "fg": 140, "rotates": false}, {"id": "overlay_worn_long_patchwork_scarf_loose", "fg": 140, "rotates": false}, {"id": "overlay_worn_maid_dress", "fg": 108, "rotates": false}, {"id": "overlay_worn_maid_hat", "fg": 125, "rotates": false}, {"id": "overlay_worn_maid_hat", "fg": 68, "rotates": false}, {"id": "overlay_worn_mask_dust", "fg": 116, "rotates": false}, {"id": "overlay_worn_mask_filter", "fg": 121, "rotates": false}, {"id": "overlay_worn_mask_gas", "fg": 142, "rotates": false}, {"id": "overlay_worn_mask_gas_xl", "fg": 142, "rotates": false}, {"id": ["overlay_worn_mask_hockey", "overlay_worn_mask_guy_fawkes"], "fg": 117, "rotates": false}, {"id": "overlay_worn_mask_rioter", "fg": 99, "rotates": false}, {"id": ["overlay_worn_mask_ski", "overlay_worn_mask_ski_loose", "overlay_worn_balclava"], "fg": 97, "rotates": false}, {"id": "overlay_worn_mask_survivorxl", "fg": 142, "rotates": false}, {"id": "overlay_worn_mask_survivor", "fg": 142, "rotates": false}, {"id": "overlay_worn_mask_wsurvivorxl", "fg": 142, "rotates": false}, {"id": "overlay_worn_mask_wsurvivor", "fg": 142, "rotates": false}, {"id": "overlay_worn_motorbike_armor", "fg": 135, "rotates": false}, {"id": "overlay_worn_patchwork_scarf", "fg": 140, "rotates": false}, {"id": "overlay_worn_patchwork_scarf_loose", "fg": 140, "rotates": false}, {"id": "overlay_worn_pickelhaube", "fg": 49, "rotates": false}, {"id": "overlay_worn_polo_shirt", "fg": 133, "rotates": false}, {"id": ["overlay_worn_poncho", "overlay_worn_folding_poncho_on"], "fg": 118, "rotates": false}, {"id": "overlay_worn_porkpie", "fg": 129, "rotates": false}, {"id": "overlay_worn_pot_helmet", "fg": 124, "rotates": false}, {"id": ["overlay_worn_purse", "overlay_worn_slingpack", "overlay_worn_fanny", "overlay_worn_dive_bag"], "fg": 63, "rotates": false}, {"id": ["overlay_worn_rucksack", "overlay_worn_molle_pack", "overlay_worn_gobag", "overlay_worn_duffelbag"], "fg": 64, "rotates": false}, {"id": "overlay_worn_scarf", "fg": 140, "rotates": false}, {"id": "overlay_worn_scarf_fur", "fg": 140, "rotates": false}, {"id": "overlay_worn_scarf_fur_long", "fg": 140, "rotates": false}, {"id": "overlay_worn_scarf_fur_loose", "fg": 140, "rotates": false}, {"id": "overlay_worn_scarf_long", "fg": 140, "rotates": false}, {"id": "overlay_worn_scarf_long_loose", "fg": 140, "rotates": false}, {"id": "overlay_worn_scarf_loose", "fg": 140, "rotates": false}, {"id": "overlay_worn_shark_suit", "fg": 135, "rotates": false}, {"id": "overlay_worn_sheriffshirt", "fg": 130, "rotates": false}, {"id": "overlay_worn_shoulder_strap", "fg": 41, "rotates": false}, {"id": "overlay_worn_striped_shirt", "fg": 131, "rotates": false}, {"id": "overlay_worn_subsuit_xl", "fg": 102, "rotates": false}, {"id": "overlay_worn_suit", "fg": 67, "rotates": false}, {"id": "overlay_worn_sunglasses", "fg": 47, "rotates": false}, {"id": "overlay_worn_sweater", "fg": 59, "rotates": false}, {"id": "overlay_worn_sweatshirt", "fg": 58, "rotates": false}, {"id": "overlay_worn_tac_helmet", "fg": 139, "rotates": false}, {"id": "overlay_worn_tank_top", "fg": 70, "rotates": false}, {"id": "overlay_worn_tank_top", "fg": 61, "rotates": false}, {"id": "overlay_worn_technician_shirt_blue", "fg": 132, "rotates": false}, {"id": "overlay_worn_technician_shirt_gray", "fg": 133, "rotates": false}, {"id": "overlay_worn_technician_shirt_ltblue", "fg": 133, "rotates": false}, {"id": "overlay_worn_tophat", "fg": 128, "rotates": false}, {"id": "overlay_worn_trenchcoat", "fg": 119, "rotates": false}, {"id": "overlay_worn_trenchcoat_leather", "fg": 119, "rotates": false}, {"id": "overlay_worn_tshirt", "fg": 134, "rotates": false}, {"id": "overlay_worn_tshirt_text", "fg": 134, "rotates": false}, {"id": "overlay_worn_turban", "fg": 100, "rotates": false}, {"id": "overlay_worn_tux", "fg": 93, "rotates": false}, {"id": "cursor", "fg": 143}, {"id": "explosion", "fg": 146, "multitile": true, "additional_tiles": [{"id": "center", "fg": 146}, {"id": "corner", "fg": 144}, {"id": "edge", "fg": 146}, {"id": "t_connection", "fg": 146}, {"id": "end_piece", "fg": 146}, {"id": "unconnected", "fg": 146}], "rotates": false}, {"id": "footstep", "fg": 147, "rotates": false}, {"id": "highlight_item", "fg": 148, "rotates": false}, {"id": "lighting_boomered_dark", "fg": 150, "rotates": false}, {"id": "lighting_boomered_light", "fg": 149, "rotates": false}, {"id": "lighting_hidden", "fg": 154, "rotates": false}, {"id": "lighting_lowlight_dark", "fg": 152, "rotates": false}, {"id": "lighting_lowlight_light", "fg": 151, "rotates": false}, {"id": "line_target", "fg": 145}, {"id": "line_trail", "bg": 145}, {"id": "unknown", "fg": 153, "rotates": false}, {"id": "animation_bullet_flame", "fg": 158}, {"id": "animation_bullet_normal", "fg": 155}, {"id": "animation_bullet_shrapnel", "fg": 155}, {"id": "animation_hit", "bg": 156}, {"id": "animation_line", "bg": 157}, {"id": "record_weather", "fg": 968, "rotates": false, "multitile": false}, {"id": "weatherby_5", "fg": 509, "rotates": false, "multitile": false}, {"id": "weather_acid_drop", "bg": 160}, {"id": "weather_rain_drop", "bg": 159}, {"id": "weather_reader", "fg": 939, "rotates": false, "multitile": false}, {"id": "weather_snowflake", "bg": 161}, {"id": "fd_acid", "bg": 194, "rotates": false}, {"id": "fd_acid_vent", "fg": 187, "rotates": false}, {"id": "fd_bees", "fg": 168, "rotates": false}, {"id": "fd_bile", "bg": 191, "rotates": false}, {"id": "fd_blood", "bg": 190, "rotates": false}, {"id": "fd_blood_insect", "bg": 214, "rotates": false}, {"id": "fd_blood_invertebrate", "bg": 215, "rotates": false}, {"id": "fd_blood_veggy", "bg": 216, "rotates": false}, {"id": "fd_cigsmoke", "fg": 183, "multitile": true, "additional_tiles": [{"id": "center", "fg": 178}, {"id": "corner", "fg": 179}, {"id": "edge", "fg": 180}, {"id": "t_connection", "fg": 181}, {"id": "end_piece", "fg": 182}, {"id": "unconnected", "fg": 183}], "rotates": false}, {"id": "fd_cracksmoke", "fg": 183, "multitile": true, "additional_tiles": [{"id": "center", "fg": 178}, {"id": "corner", "fg": 179}, {"id": "edge", "fg": 180}, {"id": "t_connection", "fg": 181}, {"id": "end_piece", "fg": 182}, {"id": "unconnected", "fg": 183}], "rotates": false}, {"id": "fd_dazzling", "fg": 177, "rotates": false}, {"id": "fd_electricity", "fg": 192, "multitile": true, "additional_tiles": [{"id": "center", "fg": 208}, {"id": "corner", "fg": 204}, {"id": "edge", "fg": 205}, {"id": "t_connection", "fg": 206}, {"id": "end_piece", "fg": 207}, {"id": "unconnected", "fg": 192}], "rotates": false}, {"id": "fd_fatigue", "fg": 167, "multitile": true, "additional_tiles": [{"id": "center", "fg": 162}, {"id": "corner", "fg": 163}, {"id": "edge", "fg": 164}, {"id": "t_connection", "fg": 165}, {"id": "end_piece", "fg": 166}, {"id": "unconnected", "fg": 167}], "rotates": false}, {"id": "fd_fire", "fg": 197, "multitile": true, "additional_tiles": [{"id": "center", "fg": 220}, {"id": "corner", "fg": 221}, {"id": "edge", "fg": 222}, {"id": "t_connection", "fg": 223}, {"id": "end_piece", "fg": 224}, {"id": "unconnected", "fg": 197}], "rotates": false}, {"id": "fd_fire_vent", "fg": 185, "rotates": false}, {"id": "fd_flame_burst", "fg": 197, "multitile": true, "additional_tiles": [{"id": "center", "fg": 220}, {"id": "corner", "fg": 221}, {"id": "edge", "fg": 222}, {"id": "t_connection", "fg": 223}, {"id": "end_piece", "fg": 224}, {"id": "unconnected", "fg": 197}], "rotates": false}, {"id": "fd_fungal_haze", "fg": 175, "multitile": true, "additional_tiles": [{"id": "center", "fg": 170}, {"id": "corner", "fg": 171}, {"id": "edge", "fg": 172}, {"id": "t_connection", "fg": 173}, {"id": "end_piece", "fg": 174}, {"id": "unconnected", "fg": 175}], "rotates": false}, {"id": "fd_gas_vent", "fg": 184, "rotates": false}, {"id": "fd_gibs_flesh", "fg": 217, "rotates": false}, {"id": "fd_gibs_insect", "fg": 214, "rotates": false}, {"id": "fd_gibs_invertebrate", "bg": 215, "rotates": false}, {"id": "fd_gibs_veggy", "bg": 191, "rotates": false}, {"id": "fd_hot_air1", "fg": 169, "rotates": false}, {"id": "fd_hot_air2", "fg": 169, "rotates": false}, {"id": "fd_hot_air3", "fg": 169, "rotates": false}, {"id": "fd_hot_air4", "fg": 169, "rotates": false}, {"id": "fd_incendiary", "fg": 158, "multitile": true, "additional_tiles": [{"id": "center", "fg": 220}, {"id": "corner", "fg": 221}, {"id": "edge", "fg": 222}, {"id": "t_connection", "fg": 223}, {"id": "end_piece", "fg": 224}, {"id": "unconnected", "fg": 158}], "rotates": false}, {"id": "fd_laser", "fg": 219}, {"id": "fd_methsmoke", "fg": 183, "multitile": true, "additional_tiles": [{"id": "center", "fg": 178}, {"id": "corner", "fg": 179}, {"id": "edge", "fg": 180}, {"id": "t_connection", "fg": 181}, {"id": "end_piece", "fg": 182}, {"id": "unconnected", "fg": 183}], "rotates": false}, {"id": "fd_nuke_gas", "fg": 189, "multitile": true, "additional_tiles": [{"id": "center", "fg": 209}, {"id": "corner", "fg": 210}, {"id": "edge", "fg": 211}, {"id": "t_connection", "fg": 212}, {"id": "end_piece", "fg": 213}, {"id": "unconnected", "fg": 189}], "rotates": false}, {"id": "fd_plasma", "fg": 218}, {"id": "fd_push_items", "fg": 2112, "rotates": false}, {"id": "fd_relax_gas", "fg": 167, "multitile": true, "additional_tiles": [{"id": "center", "fg": 162}, {"id": "corner", "fg": 163}, {"id": "edge", "fg": 164}, {"id": "t_connection", "fg": 165}, {"id": "end_piece", "fg": 166}, {"id": "unconnected", "fg": 167}], "rotates": false}, {"id": "fd_rubble", "bg": 198, "rotates": false}, {"id": "fd_sap", "bg": 191, "rotates": false}, {"id": "fd_shock_vent", "fg": 186, "rotates": false}, {"id": "fd_slime", "bg": 195, "rotates": false}, {"id": "fd_sludge", "bg": 196, "rotates": false}, {"id": "fd_smoke", "fg": 203, "multitile": true, "additional_tiles": [{"id": "center", "fg": 188}, {"id": "corner", "fg": 199}, {"id": "edge", "fg": 200}, {"id": "t_connection", "fg": 201}, {"id": "end_piece", "fg": 202}, {"id": "unconnected", "fg": 203}], "rotates": false}, {"id": "fd_spotlight", "fg": 176, "rotates": false}, {"id": "fd_tear_gas", "fg": 203, "multitile": true, "additional_tiles": [{"id": "center", "fg": 188}, {"id": "corner", "fg": 199}, {"id": "edge", "fg": 200}, {"id": "t_connection", "fg": 201}, {"id": "end_piece", "fg": 202}, {"id": "unconnected", "fg": 203}], "rotates": false}, {"id": "fd_toxic_gas", "fg": 189, "multitile": true, "additional_tiles": [{"id": "center", "fg": 209}, {"id": "corner", "fg": 210}, {"id": "edge", "fg": 211}, {"id": "t_connection", "fg": 212}, {"id": "end_piece", "fg": 213}, {"id": "unconnected", "fg": 189}], "rotates": false}, {"id": "fd_web", "bg": 193, "rotates": false}, {"id": "fd_weedsmoke", "fg": 183, "multitile": true, "additional_tiles": [{"id": "center", "fg": 178}, {"id": "corner", "fg": 179}, {"id": "edge", "fg": 180}, {"id": "t_connection", "fg": 181}, {"id": "end_piece", "fg": 182}, {"id": "unconnected", "fg": 183}], "rotates": false}, {"id": "f_anvil", "fg": 751, "rotates": false, "multitile": false}, {"id": "f_arcade_machine", "fg": 253, "rotates": false}, {"id": "f_armchair", "fg": 234, "rotates": false}, {"id": "f_ash", "bg": 1976, "rotates": false}, {"id": "f_aut_gas_console", "fg": 1813, "bg": 2058, "rotates": false}, {"id": "f_aut_gas_console_o", "fg": 1814, "bg": 2058, "rotates": false}, {"id": "f_ball_mach", "fg": 232, "rotates": false}, {"id": "f_barricade_road", "fg": 247, "rotates": false}, {"id": "f_bathtub", "fg": 301, "multitile": true, "additional_tiles": [{"id": "center", "fg": 333}, {"id": "corner", "fg": 334}, {"id": "edge", "fg": 324}, {"id": "t_connection", "fg": 335}, {"id": "end_piece", "fg": 325}, {"id": "unconnected", "fg": 301}], "rotates": false}, {"id": "f_bed", "fg": 230, "multitile": true, "additional_tiles": [{"id": "center", "fg": 225}, {"id": "corner", "fg": 226}, {"id": "edge", "fg": 227}, {"id": "t_connection", "fg": 228}, {"id": "end_piece", "fg": 229}, {"id": "unconnected", "fg": 230}], "rotates": false}, {"id": "f_bench", "fg": 270, "rotates": false}, {"id": "f_bluebell", "fg": 345, "rotates": false}, {"id": "f_bookcase", "fg": 284, "rotates": false}, {"id": "f_boulder_large", "fg": 268, "bg": 2049, "rotates": false}, {"id": "f_boulder_medium", "fg": 267, "bg": 2049, "rotates": false}, {"id": "f_boulder_small", "fg": 266, "bg": 2049, "rotates": false}, {"id": "f_bulletin", "fg": 238, "rotates": false}, {"id": "f_canvas_door", "fg": 316, "rotates": false}, {"id": "f_canvas_door_o", "fg": 317, "rotates": false}, {"id": "f_canvas_floor", "bg": 1792, "rotates": false}, {"id": "f_canvas_wall", "fg": 245, "bg": [], "multitile": true, "additional_tiles": [{"id": "center", "fg": 311}, {"id": "corner", "fg": 312}, {"id": "edge", "fg": 313}, {"id": "t_connection", "fg": 314}, {"id": "end_piece", "fg": 315}, {"id": "unconnected", "fg": 245}], "rotates": false}, {"id": "f_cattails", "fg": 265, "rotates": false}, {"id": "f_center_groundsheet", "bg": 321, "rotates": false}, {"id": "f_chair", "fg": 231, "rotates": false}, {"id": "f_counter", "fg": 2027, "multitile": true, "additional_tiles": [{"id": "center", "fg": 323}, {"id": "corner", "fg": 326}, {"id": "edge", "fg": 327}, {"id": "t_connection", "fg": 328}, {"id": "end_piece", "fg": 298}, {"id": "unconnected", "fg": 2027}], "rotates": false}, {"id": "f_crate_c", "fg": 291, "rotates": false}, {"id": "f_crate_o", "fg": 296, "rotates": false}, {"id": "f_cupboard", "fg": 329, "rotates": false}, {"id": "f_dahlia", "fg": 346, "rotates": false}, {"id": "f_dandelion", "fg": 259, "rotates": false}, {"id": "f_datura", "fg": 260, "rotates": false}, {"id": "f_desk", "fg": 232, "multitile": true, "additional_tiles": [{"id": "center", "fg": 292}, {"id": "corner", "fg": 293}, {"id": "edge", "fg": 294}, {"id": "t_connection", "fg": 295}, {"id": "end_piece", "fg": 297}, {"id": "unconnected", "fg": 232}], "rotates": false}, {"id": "f_displaycase", "fg": 257, "rotates": false}, {"id": "f_displaycase_b", "fg": 258, "rotates": false}, {"id": "f_dive_block", "fg": 290, "rotates": false}, {"id": "f_dresser", "fg": 285, "rotates": false}, {"id": "f_dryer", "fg": 300, "rotates": false}, {"id": "f_dumpster", "fg": 289, "multitile": true, "additional_tiles": [{"id": "center", "fg": 275}, {"id": "corner", "fg": 276}, {"id": "edge", "fg": 277}, {"id": "t_connection", "fg": 278}, {"id": "end_piece", "fg": 279}, {"id": "unconnected", "fg": 289}], "rotates": false}, {"id": "f_egg_sackbw", "fg": 250, "rotates": false}, {"id": "f_egg_sacke", "fg": 252, "rotates": false}, {"id": "f_egg_sackws", "fg": 251, "rotates": false}, {"id": "f_ergometer", "fg": 255, "rotates": false}, {"id": "f_exercise", "fg": 272, "rotates": false}, {"id": "f_fema_groundsheet", "bg": 321, "rotates": false}, {"id": "f_fireplace", "fg": 332, "rotates": false}, {"id": "f_floor_canvas", "fg": 262, "rotates": false}, {"id": "f_flower_fungal", "fg": 235, "rotates": false}, {"id": "f_flower_marloss", "fg": 261, "rotates": false}, {"id": "f_forge", "fg": 502, "rotates": false, "multitile": false}, {"id": "f_fridge", "fg": 287, "rotates": false}, {"id": "f_fungal_clump", "fg": 237, "rotates": false}, {"id": "f_fungal_mass", "fg": 236, "rotates": false}, {"id": "f_fvat_empty", "fg": 248, "rotates": false}, {"id": "f_fvat_full", "fg": 249, "rotates": false}, {"id": "f_glass_fridge", "fg": 288, "rotates": false}, {"id": "f_groundsheet", "bg": 321, "rotates": false}, {"id": "f_gunsafe_mj", "fg": 282, "rotates": false}, {"id": "f_gunsafe_ml", "fg": 281, "rotates": false}, {"id": "f_gun_safe_el", "fg": 281, "rotates": false}, {"id": "f_hay", "fg": 302, "rotates": false}, {"id": "f_indoor_plant", "fg": 271, "rotates": false}, {"id": "f_indoor_plant_y", "fg": 244, "rotates": false}, {"id": "f_kiln_empty", "fg": 505, "rotates": false, "multitile": false}, {"id": "f_kiln_full", "fg": 776, "rotates": false, "multitile": false}, {"id": "f_lane", "fg": 338, "rotates": true}, {"id": "f_large_canvas_door", "fg": 316, "rotates": false}, {"id": "f_large_canvas_door_o", "fg": 317, "rotates": false}, {"id": "f_large_canvas_wall", "fg": 245, "bg": [], "multitile": true, "additional_tiles": [{"id": "center", "fg": 311}, {"id": "corner", "fg": 312}, {"id": "edge", "fg": 313}, {"id": "t_connection", "fg": 314}, {"id": "end_piece", "fg": 315}, {"id": "unconnected", "fg": 245}], "rotates": false}, {"id": "f_large_groundsheet", "bg": 321, "rotates": false}, {"id": "f_locker", "fg": 286, "rotates": false}, {"id": "f_makeshift_bed", "fg": 230, "rotates": false}, {"id": "f_mutpoppy", "fg": 273, "rotates": false}, {"id": "f_oven", "fg": 330, "rotates": false}, {"id": "f_pinball_machine", "fg": 254, "rotates": false}, {"id": "f_plant_harvest", "fg": 344, "rotates": false}, {"id": "f_plant_mature", "fg": 343, "rotates": false}, {"id": "f_plant_seedling", "fg": 342, "rotates": false}, {"id": "f_plant_seed", "fg": 341, "rotates": false}, {"id": "f_pool_table", "fg": 242, "multitile": true, "additional_tiles": [{"id": "corner", "fg": 241}, {"id": "t_connection", "fg": 242}], "rotates": false}, {"id": "f_rack", "fg": 280, "rotates": false}, {"id": "f_rubble", "bg": 1940, "rotates": false}, {"id": "f_rubble_rock", "bg": 198, "rotates": false}, {"id": "f_safe_c", "fg": 281, "rotates": false}, {"id": "f_safe_l", "fg": 282, "rotates": false}, {"id": "f_safe_o", "fg": 283, "rotates": false}, {"id": "f_sandbag_half", "fg": 263, "rotates": false}, {"id": "f_sandbag_wall", "fg": 264, "rotates": false}, {"id": "f_shower", "fg": 340, "rotates": false}, {"id": "f_sign", "fg": 238, "rotates": false}, {"id": "f_sink", "fg": 233, "rotates": false}, {"id": "f_skin_door", "fg": 319, "rotates": false}, {"id": "f_skin_door_o", "fg": 320, "rotates": false}, {"id": "f_skin_groundsheet", "fg": 339, "rotates": false}, {"id": "f_skin_wall", "fg": 246, "bg": [], "multitile": true, "additional_tiles": [{"id": "center", "fg": 303}, {"id": "corner", "fg": 304}, {"id": "edge", "fg": 305}, {"id": "t_connection", "fg": 306}, {"id": "end_piece", "fg": 318}, {"id": "unconnected", "fg": 246}], "rotates": false}, {"id": "f_sofa", "fg": 240, "rotates": false}, {"id": "f_standing_tank", "fg": 420, "rotates": false, "multitile": false}, {"id": "f_statue", "fg": 243, "rotates": false}, {"id": "f_still", "fg": 742, "rotates": false, "multitile": false}, {"id": "f_straw_bed", "fg": 2103, "rotates": false}, {"id": "f_table", "fg": 322, "multitile": true, "additional_tiles": [{"id": "center", "fg": 2003}, {"id": "corner", "fg": 307}, {"id": "edge", "fg": 308}, {"id": "t_connection", "fg": 309}, {"id": "end_piece", "fg": 310}, {"id": "unconnected", "fg": 322}], "rotates": false}, {"id": "f_tatami", "fg": 339, "rotates": false}, {"id": "f_toilet", "fg": 274, "rotates": false}, {"id": "f_trashcan", "fg": 269, "rotates": false}, {"id": "f_treadmill", "fg": 256, "rotates": false}, {"id": "f_vending_c", "fg": 336, "rotates": false}, {"id": "f_vending_o", "fg": 337, "rotates": false}, {"id": "f_vending_reinforced", "fg": 239, "rotates": false}, {"id": "f_washer", "fg": 299, "rotates": false}, {"id": "f_woodstove", "fg": 331, "rotates": false}, {"id": "f_wood_keg", "fg": 949, "rotates": false}, {"id": "f_wreckage", "bg": 1977, "rotates": false}, {"id": "10mm", "fg": 954, "rotates": false, "multitile": false}, {"id": "120mm_HEAT", "fg": 959, "rotates": false, "multitile": false}, {"id": "12mm", "fg": 955, "rotates": false, "multitile": false}, {"id": "1cyl_combustion", "fg": 873, "rotates": false, "multitile": false}, {"id": "1cyl_combustion_small", "fg": 873, "rotates": false, "multitile": false}, {"id": "223", "fg": 954, "rotates": false, "multitile": false}, {"id": "223_casing", "fg": 958}, {"id": "22_casing", "fg": 958}, {"id": "22_cb", "fg": 954, "rotates": false, "multitile": false}, {"id": "22_fmj", "fg": 954, "rotates": false, "multitile": false}, {"id": "22_lr", "fg": 954, "rotates": false, "multitile": false}, {"id": "22_ratshot", "fg": 954, "rotates": false, "multitile": false}, {"id": "270", "fg": 954, "rotates": false, "multitile": false}, {"id": "2lcanteen", "fg": 349, "rotates": false, "multitile": false}, {"id": "2x4", "fg": 549, "rotates": true}, {"id": "2_shot_special", "fg": 517, "rotates": false, "multitile": false}, {"id": "3006fmj", "fg": 954, "rotates": false, "multitile": false}, {"id": "3006", "fg": 954, "rotates": false, "multitile": false}, {"id": "3006_casing", "fg": 958}, {"id": "3006_incendiary", "fg": 954, "rotates": false, "multitile": false}, {"id": "300_casing", "fg": 958}, {"id": "300_winmag", "fg": 954, "rotates": false, "multitile": false}, {"id": "308", "fg": 954, "rotates": false, "multitile": false}, {"id": "308_casing", "fg": 958}, {"id": "30gal_drum", "fg": 948, "rotates": false}, {"id": "32_acp", "fg": 954, "rotates": false, "multitile": false}, {"id": "32_casing", "fg": 958}, {"id": "38_casing", "fg": 958}, {"id": "38_fmj", "fg": 954, "rotates": false, "multitile": false}, {"id": "38_special", "fg": 954, "rotates": false, "multitile": false}, {"id": "38_super", "fg": 954, "rotates": false, "multitile": false}, {"id": "40fmj", "fg": 954, "rotates": false, "multitile": false}, {"id": "40mm_acidbomb", "fg": 959, "rotates": false, "multitile": false}, {"id": "40mm_beanbag", "fg": 959, "rotates": false, "multitile": false}, {"id": "40mm_casing", "fg": 958}, {"id": "40mm_concussive", "fg": 959, "rotates": false, "multitile": false}, {"id": "40mm_flare", "fg": 959, "rotates": false, "multitile": false}, {"id": "40mm_flashbang", "fg": 959, "rotates": false, "multitile": false}, {"id": "40mm_flechette", "fg": 959, "rotates": false, "multitile": false}, {"id": "40mm_frag", "fg": 959, "rotates": false, "multitile": false}, {"id": "40mm_incendiary", "fg": 959, "rotates": false, "multitile": false}, {"id": "40mm_shot", "fg": 959, "rotates": false, "multitile": false}, {"id": "40mm_smoke", "fg": 959, "rotates": false, "multitile": false}, {"id": "40mm_teargas", "fg": 959, "rotates": false, "multitile": false}, {"id": "40sw", "fg": 954, "rotates": false, "multitile": false}, {"id": "40_casing", "fg": 958}, {"id": "44fmj", "fg": 954, "rotates": false, "multitile": false}, {"id": "44magnum", "fg": 954, "rotates": false, "multitile": false}, {"id": "44_casing", "fg": 958}, {"id": "454_casing", "fg": 958}, {"id": "454_Casull", "fg": 954, "rotates": false, "multitile": false}, {"id": "45_acp", "fg": 954, "rotates": false, "multitile": false}, {"id": "45_casing", "fg": 958}, {"id": "45_jhp", "fg": 954, "rotates": false, "multitile": false}, {"id": "45_super", "fg": 954, "rotates": false, "multitile": false}, {"id": "46mm", "fg": 954, "rotates": false, "multitile": false}, {"id": "46mm_casing", "fg": 958}, {"id": "500_casing", "fg": 958}, {"id": "500_Magnum", "fg": 954, "rotates": false, "multitile": false}, {"id": "556", "fg": 954, "rotates": false, "multitile": false}, {"id": "556_incendiary", "fg": 954, "rotates": false, "multitile": false}, {"id": "55gal_drum", "fg": 947, "rotates": false}, {"id": "57mm", "fg": 954, "rotates": false, "multitile": false}, {"id": "57mm_casing", "fg": 958}, {"id": "5x50dart", "fg": 821, "rotates": false, "multitile": false}, {"id": "5x50heavy", "fg": 821, "rotates": false, "multitile": false}, {"id": "5x50hull", "fg": 821, "rotates": false, "multitile": false}, {"id": "5x50_hull", "fg": 941}, {"id": "66mm_HEAT", "fg": 959, "rotates": false, "multitile": false}, {"id": "700nx", "fg": 954, "rotates": false, "multitile": false}, {"id": "700nx_casing", "fg": 958}, {"id": "762R_casing", "fg": 958}, {"id": "762_25", "fg": 954, "rotates": false, "multitile": false}, {"id": "762_25", "fg": 954, "rotates": false, "multitile": false}, {"id": "762_51", "fg": 954, "rotates": false, "multitile": false}, {"id": "762_51_incendiary", "fg": 954, "rotates": false, "multitile": false}, {"id": "762_54R", "fg": 954, "rotates": false, "multitile": false}, {"id": "762_casing", "fg": 958}, {"id": "762_m43", "fg": 954, "rotates": false, "multitile": false}, {"id": "762_m87", "fg": 954, "rotates": false, "multitile": false}, {"id": "84x246mm_hedp", "fg": 959, "rotates": false, "multitile": false}, {"id": "84x246mm_he", "fg": 959, "rotates": false, "multitile": false}, {"id": "84x246mm_smoke", "fg": 959, "rotates": false, "multitile": false}, {"id": "8mm_bootleg", "fg": 956, "rotates": false, "multitile": false}, {"id": "8mm_bootleg_jsp", "fg": 956, "rotates": false, "multitile": false}, {"id": "8mm_caseless", "fg": 956, "rotates": false, "multitile": false}, {"id": "8mm_civilian", "fg": 956, "rotates": false, "multitile": false}, {"id": "8mm_fmj", "fg": 956, "rotates": false, "multitile": false}, {"id": "8mm_hvp", "fg": 956, "rotates": false, "multitile": false}, {"id": "8mm_inc", "fg": 956, "rotates": false, "multitile": false}, {"id": "8mm_jhp", "fg": 956, "rotates": false, "multitile": false}, {"id": "9mmfmj", "fg": 954, "rotates": false, "multitile": false}, {"id": "9mmP2", "fg": 954, "rotates": false, "multitile": false}, {"id": "9mmP", "fg": 954, "rotates": false, "multitile": false}, {"id": "9mm", "fg": 954, "rotates": false, "multitile": false}, {"id": "9mm_casing", "fg": 958}, {"id": "acidbomb", "fg": 636, "rotates": false, "multitile": false}, {"id": "acidbomb_act", "fg": 637, "rotates": false, "multitile": false}, {"id": "acid", "fg": 931, "rotates": false, "multitile": false}, {"id": "acr", "fg": 550, "rotates": false, "multitile": false}, {"id": "adjustable_stock", "fg": 918, "rotates": false, "multitile": false}, {"id": "adrenaline_injector", "fg": 748, "rotates": false, "multitile": false}, {"id": "advanced_ecig", "fg": 372, "rotates": false, "multitile": false}, {"id": "adv_UPS_off", "fg": 652, "rotates": false, "multitile": false}, {"id": "adv_UPS_on", "fg": 653, "rotates": false, "multitile": false}, {"id": "airhorn", "fg": 545, "rotates": false, "multitile": false}, {"id": "airspeargun", "fg": 519, "rotates": false, "multitile": false}, {"id": "ak47", "fg": 551, "rotates": false, "multitile": false}, {"id": "alarmclock", "fg": 534, "rotates": false, "multitile": false}, {"id": "alloy_plate", "fg": 461, "rotates": false, "multitile": false}, {"id": "alloy_sheet", "fg": 461, "rotates": false, "multitile": false}, {"id": "alternator_car", "fg": 1424, "rotates": false, "multitile": false}, {"id": "alternator_motorbike", "fg": 1424, "rotates": false, "multitile": false}, {"id": "alternator_truck", "fg": 1424, "rotates": false, "multitile": false}, {"id": "american_180", "fg": 530, "rotates": false, "multitile": false}, {"id": "ammonia", "fg": 931, "rotates": false, "multitile": false}, {"id": "amplifier", "fg": 950, "rotates": false, "multitile": false}, {"id": "ampoule", "fg": 452, "rotates": false, "multitile": false}, {"id": "antenna", "fg": 372, "rotates": false, "multitile": false}, {"id": "anvil", "fg": 751, "rotates": false, "multitile": false}, {"id": "apple_cider", "fg": 1406, "rotates": false, "multitile": false}, {"id": "ar15", "fg": 550, "rotates": false, "multitile": false}, {"id": "arx160", "fg": 550, "rotates": false, "multitile": false}, {"id": "ashot", "fg": 518, "rotates": false, "multitile": false}, {"id": "atomic_coffeepot", "fg": 946, "rotates": false, "multitile": false}, {"id": "atomic_coffee", "fg": 932, "rotates": false, "multitile": false}, {"id": "atomic_light", "fg": 920, "rotates": false, "multitile": false}, {"id": "autofire", "fg": 918, "rotates": false, "multitile": false}, {"id": "aux_flamer", "fg": 918, "rotates": false, "multitile": false}, {"id": "ax", "fg": 694, "rotates": false, "multitile": false}, {"id": "bagh_nakha", "fg": 479, "rotates": false, "multitile": false}, {"id": "bag_apple_vac", "fg": 1364, "rotates": false, "multitile": false}, {"id": "bag_bundle_10", "fg": 499, "rotates": false, "multitile": false}, {"id": "bag_canvas", "fg": 1354, "rotates": false, "multitile": false}, {"id": "bag_canvas_small", "fg": 1354, "rotates": false, "multitile": false}, {"id": "bag_fish_vac", "fg": 1401, "rotates": false, "multitile": false}, {"id": "bag_hflesh_vac", "fg": 1362, "rotates": false, "multitile": false}, {"id": "bag_meat_vac", "fg": 1362, "rotates": false, "multitile": false}, {"id": "bag_plastic", "fg": 499, "rotates": false}, {"id": "bag_veggy_vac", "fg": 1363, "rotates": false, "multitile": false}, {"id": "barometer", "fg": 418, "rotates": false, "multitile": false}, {"id": "barrel_big", "fg": 918, "rotates": false, "multitile": false}, {"id": "barrel_ported", "fg": 918, "rotates": false, "multitile": false}, {"id": "barrel_rifled", "fg": 918, "rotates": false, "multitile": false}, {"id": "barrel_small", "fg": 918, "rotates": false, "multitile": false}, {"id": "baseball", "fg": 921, "rotates": false, "multitile": false}, {"id": "basket", "fg": 1469, "rotates": false}, {"id": "baton-extended", "fg": 441, "rotates": false, "multitile": false}, {"id": "baton", "fg": 441, "rotates": false, "multitile": false}, {"id": "battery", "fg": 901, "rotates": false, "multitile": false}, {"id": "battery_atomic", "fg": 541, "rotates": false, "multitile": false}, {"id": "battery_car", "fg": 874, "rotates": false}, {"id": "battery_compartment", "fg": 571, "rotates": false, "multitile": false}, {"id": "battery_motorbike", "fg": 874, "rotates": false}, {"id": "battery_truck", "fg": 874, "rotates": false}, {"id": "battery_ups", "fg": 733, "rotates": false, "multitile": false}, {"id": "battleaxe", "fg": 489, "rotates": false, "multitile": false}, {"id": "battleaxe_fake", "fg": 489, "rotates": false, "multitile": false}, {"id": ["battleaxe_fake", "battleaxe_inferior", "battleaxe"], "fg": 861, "rotates": false}, {"id": "battletorch", "fg": 490, "rotates": false, "multitile": false}, {"id": "battletorch_done", "fg": 480, "rotates": false, "multitile": false}, {"id": "battletorch_lit", "fg": 491, "rotates": false, "multitile": false}, {"id": "bat", "fg": 438, "rotates": false, "multitile": false}, {"id": "bat_metal", "fg": 439, "rotates": false, "multitile": false}, {"id": "bayonet", "fg": 918, "rotates": false, "multitile": false}, {"id": "bbgun", "fg": 509, "rotates": false, "multitile": false}, {"id": "bb", "fg": 902, "rotates": false, "multitile": false}, {"id": "bearing", "fg": 902, "rotates": false, "multitile": false}, {"id": "beartrap", "fg": 604, "rotates": false, "multitile": false}, {"id": "beer", "fg": 932, "rotates": false, "multitile": false}, {"id": "bee_sting", "fg": 442, "rotates": false, "multitile": false}, {"id": "belgian_ale", "fg": 932, "rotates": false, "multitile": false}, {"id": "bigun", "fg": 536, "rotates": false, "multitile": false}, {"id": "binoculars", "fg": 385, "rotates": false, "multitile": false}, {"id": "biollante_bud", "fg": 381, "rotates": false, "multitile": false}, {"id": "bio_adrenaline", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_ads", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_alarm", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_ankles", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_armor_arms", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_armor_eyes", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_armor_head", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_armor_legs", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_armor_torso", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_batteries", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_blade", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_blade_weapon", "fg": 690, "rotates": false, "multitile": false}, {"id": "bio_blaster", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_blood_anal", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_blood_filter", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_carbon", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_chain_lightning", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_claws", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_claws_weapon", "fg": 479, "rotates": false, "multitile": false}, {"id": "bio_climate", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_cloak", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_cqb", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_deformity", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_dex_enhancer", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_digestion", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_dis_acid", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_dis_shock", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_drain", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_ears", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_emp", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_ethanol", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_evap", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_eye_enhancer", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_face_mask", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_faraday", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_fingerhack", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_flashbang", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_flashlight", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_furnace", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_geiger", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_gills", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_ground_sonar", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_heatsink", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_heat_absorb", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_hydraulics", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_infrared", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_int_enhancer", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_itchy", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_laser", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_leaky", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_leukocyte", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_lighter", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_lockpick", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_magnet", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_membrane", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_memory", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_metabolics", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_meteorologist", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_nanobots", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_night", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_night_vision", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_noise", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_nostril", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_null", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_ods", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_painkiller", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_pokedeye", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_power_armor_interface", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_power_armor_interface_mkII", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_power_storage", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_power_storage_mkII", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_power_weakness", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_probability_travel", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_purifier", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_radscrubber", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_railgun", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_razors", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_recycler", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_remote", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_resonator", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_scent_mask", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_scent_vision", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_shakes", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_shockwave", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_shock", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_sleepy", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_solar", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_spasm", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_speed", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_stiff", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_storage", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_str_enhancer", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_sunglasses", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_targeting", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_teleport", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_thumbs", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_time_freeze", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_tools", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_torsionratchet", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_trip", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_uncanny_dodge", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_ups", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_voice", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_watch", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bio_water_extractor", "fg": 1235, "rotates": false, "multitile": false}, {"id": "bipod", "fg": 918, "rotates": false, "multitile": false}, {"id": "bismuth", "fg": 904, "rotates": false, "multitile": false}, {"id": "black_box", "fg": 589, "rotates": false, "multitile": false}, {"id": "black_box_transcript", "fg": 899, "rotates": false, "multitile": false}, {"id": "blade", "fg": 389, "rotates": false, "multitile": false}, {"id": "blade_trap", "fg": 609, "rotates": false, "multitile": false}, {"id": "bleach", "fg": 931, "rotates": false, "multitile": false}, {"id": "blood", "fg": 1409, "rotates": false, "multitile": false}, {"id": "blowback", "fg": 918, "rotates": false, "multitile": false}, {"id": "blowgun", "fg": 424, "rotates": false, "multitile": false}, {"id": "bluebell_bud", "fg": 375, "rotates": false, "multitile": false}, {"id": "bluebell_flower", "fg": 870, "rotates": false, "multitile": false}, {"id": "blunderbuss", "fg": 526, "rotates": false, "multitile": false}, {"id": "blun_flechette", "fg": 953, "rotates": false, "multitile": false}, {"id": "blun_shot", "fg": 953, "rotates": false, "multitile": false}, {"id": "blun_slug", "fg": 953, "rotates": false, "multitile": false}, {"id": "board_trap", "fg": 605, "rotates": false, "multitile": false}, {"id": "bokken", "fg": 826, "rotates": false, "multitile": false}, {"id": "boltcutters", "fg": 708, "rotates": false, "multitile": false}, {"id": "bone_glue", "fg": 837, "rotates": false, "multitile": false}, {"id": "bone_plate", "fg": 460, "rotates": false, "multitile": false}, {"id": "boobytrap", "fg": 661, "rotates": false, "multitile": false}, {"id": "bootstrap", "fg": 919, "rotates": false, "multitile": false}, {"id": "bottle_glass", "fg": 511, "rotates": false}, {"id": "bottle_plastic", "fg": 1395, "rotates": false}, {"id": "bottle_plastic_small", "fg": 1395, "rotates": false}, {"id": "bot_laserturret", "fg": 360, "rotates": false, "multitile": false}, {"id": "bot_manhack", "fg": 648, "rotates": false, "multitile": false}, {"id": "bot_rifleturret", "fg": 564, "rotates": false, "multitile": false}, {"id": "bot_turret", "fg": 649, "rotates": false, "multitile": false}, {"id": "bowling_axe", "fg": 780, "rotates": false, "multitile": false}, {"id": "bowling_ball", "fg": 387, "rotates": false, "multitile": false}, {"id": "bowling_pin", "fg": 779, "rotates": false, "multitile": false}, {"id": "bowl_clay", "fg": 832, "rotates": false, "multitile": false}, {"id": "bowl_pewter", "fg": 421, "rotates": false, "multitile": false}, {"id": "bowl_plastic", "fg": 357, "rotates": false, "multitile": false}, {"id": "bow_sight", "fg": 918, "rotates": false, "multitile": false}, {"id": "box_small", "fg": 500, "rotates": false}, {"id": "brass_catcher", "fg": 918, "rotates": false, "multitile": false}, {"id": "brazier", "fg": 700, "rotates": false, "multitile": false}, {"id": "brew_dandelion_wine", "fg": 1382, "rotates": false, "multitile": false}, {"id": "brew_hb_beer", "fg": 932, "rotates": false, "multitile": false}, {"id": "brew_mead", "fg": 1382, "rotates": false, "multitile": false}, {"id": "brew_moonshine", "fg": 932, "rotates": false, "multitile": false}, {"id": "brew_pine_wine", "fg": 1410, "rotates": false, "multitile": false}, {"id": "brew_rum", "fg": 931, "rotates": false, "multitile": false}, {"id": "brew_vinegar", "fg": 934, "rotates": false, "multitile": false}, {"id": "brew_vodka", "fg": 931, "rotates": false, "multitile": false}, {"id": "brew_whiskey", "fg": 932, "rotates": false, "multitile": false}, {"id": "brick", "fg": 838, "rotates": false, "multitile": false}, {"id": "brick_kiln", "fg": 505, "rotates": false, "multitile": false}, {"id": "briefcase_smg", "fg": 918, "rotates": false, "multitile": false}, {"id": "broadfire_off", "fg": 684, "rotates": false, "multitile": false}, {"id": "broadfire_on", "fg": 685, "rotates": false, "multitile": false}, {"id": "broadsword", "fg": 682, "rotates": false, "multitile": false}, {"id": "broadsword_fake", "fg": 682, "rotates": false, "multitile": false}, {"id": "broken_copbot", "fg": 734, "rotates": false}, {"id": "broken_eyebot", "fg": 730, "rotates": false}, {"id": "broken_manhack", "fg": 648, "rotates": false, "multitile": false}, {"id": "broken_molebot", "fg": 735, "rotates": false}, {"id": "broken_riotbot", "fg": 734, "rotates": false}, {"id": "broken_skitterbot", "fg": 731, "rotates": false}, {"id": "broken_tankbot", "fg": 739, "rotates": false}, {"id": "broken_tripod", "fg": 736, "rotates": false}, {"id": "broketent", "fg": 399, "rotates": false, "multitile": false}, {"id": "broom", "fg": 431, "rotates": false, "multitile": false}, {"id": "broth", "fg": 932, "rotates": false, "multitile": false}, {"id": "broth_bone", "fg": 932, "rotates": false, "multitile": false}, {"id": "browning_blr", "fg": 509, "rotates": false, "multitile": false}, {"id": "bubblewrap", "fg": 603, "rotates": false, "multitile": false}, {"id": "bullet_crossbow", "fg": 895, "rotates": false, "multitile": false}, {"id": "bullwhip", "fg": 775, "rotates": false, "multitile": false}, {"id": "bum_wine", "fg": 1409, "rotates": false, "multitile": false}, {"id": "burnt_out_bionic", "fg": 371, "rotates": false, "multitile": false}, {"id": "bwirebat", "fg": 490, "rotates": false, "multitile": false}, {"id": "b_paint", "fg": 390, "rotates": false, "multitile": false}, {"id": "c4armed", "fg": 663, "rotates": false, "multitile": false}, {"id": "c4", "fg": 662, "rotates": false, "multitile": false}, {"id": "cable", "fg": 887, "rotates": false, "multitile": false}, {"id": "calico", "fg": 516, "rotates": false, "multitile": false}, {"id": "caltrops", "fg": 898, "rotates": false}, {"id": "camera_control", "fg": 1442, "rotates": false, "multitile": false}, {"id": "candlestick", "fg": 388, "rotates": false, "multitile": false}, {"id": "candle", "fg": 698, "rotates": false, "multitile": false}, {"id": "candle_lit", "fg": 699, "rotates": false, "multitile": false}, {"id": "cane", "fg": 444, "rotates": false, "multitile": false}, {"id": "canister_empty", "fg": 590, "rotates": false, "multitile": false}, {"id": "canister_goo", "fg": 616, "rotates": false, "multitile": false}, {"id": "canteen", "fg": 349, "rotates": false, "multitile": false}, {"id": "can_drink", "fg": 1393, "rotates": false, "multitile": false}, {"id": "can_drink_unsealed", "fg": 858, "rotates": false}, {"id": "can_food", "fg": 1394, "rotates": false, "multitile": false}, {"id": "carbine_flintlock", "fg": 509, "rotates": false, "multitile": false}, {"id": "carding_paddles", "fg": 431, "rotates": false, "multitile": false}, {"id": "cargo_rack", "fg": 1481, "rotates": false}, {"id": "carver_off", "fg": 691, "rotates": false, "multitile": false}, {"id": "carver_on", "fg": 691, "rotates": false, "multitile": false}, {"id": "cash_card", "fg": 368, "rotates": false, "multitile": false}, {"id": "cattail_rhizome", "fg": 856, "rotates": false, "multitile": false}, {"id": "cattail_stalk", "fg": 855, "rotates": false, "multitile": false}, {"id": "cell_phone", "fg": 472, "rotates": false, "multitile": false}, {"id": "ceramic_armor", "fg": 506, "rotates": false, "multitile": false}, {"id": "ceramic_bowl", "fg": 408, "rotates": false, "multitile": false}, {"id": "ceramic_cup", "fg": 409, "rotates": false, "multitile": false}, {"id": "ceramic_plate", "fg": 407, "rotates": false, "multitile": false}, {"id": "cerberus_laser", "fg": 557, "rotates": false, "multitile": false}, {"id": "cestus", "fg": 456, "rotates": false, "multitile": false}, {"id": "chainsaw_off", "fg": 599, "rotates": false, "multitile": false}, {"id": "chainsaw_on", "fg": 599, "rotates": false, "multitile": false}, {"id": "chain", "fg": 430, "rotates": false, "multitile": false}, {"id": "charcoal", "fg": 908, "rotates": false, "multitile": false}, {"id": "charge_shot", "fg": 893, "rotates": false, "multitile": false}, {"id": "char_forge", "fg": 502, "rotates": false, "multitile": false}, {"id": "char_kiln", "fg": 505, "rotates": false, "multitile": false}, {"id": "char_purifier", "fg": 503, "rotates": false, "multitile": false}, {"id": "char_smoker", "fg": 496, "rotates": false, "multitile": false}, {"id": "chemistry_set", "fg": 744, "rotates": false, "multitile": false}, {"id": "chemlab", "fg": 915, "rotates": false}, {"id": "chem_acetic_acid", "fg": 931, "rotates": false, "multitile": false}, {"id": "chem_acetone", "fg": 931, "rotates": false, "multitile": false}, {"id": "chem_aluminium_powder", "fg": 908, "rotates": false, "multitile": false}, {"id": "chem_aluminium_sulphate", "fg": 348, "rotates": false, "multitile": false}, {"id": "chem_ammonium_nitrate", "fg": 348, "rotates": false, "multitile": false}, {"id": "chem_black_powder", "fg": 908, "rotates": false, "multitile": false}, {"id": "chem_carbide", "fg": 908, "rotates": false, "multitile": false}, {"id": "chem_hmtd", "fg": 348, "rotates": false, "multitile": false}, {"id": "chem_hydrogen_peroxide", "fg": 931, "rotates": false, "multitile": false}, {"id": "chem_hydrogen_peroxide_conc", "fg": 931, "rotates": false, "multitile": false}, {"id": "chem_nitric_acid", "fg": 931, "rotates": false, "multitile": false}, {"id": "chem_rdx", "fg": 348, "rotates": false, "multitile": false}, {"id": "chem_rocket_fuel", "fg": 908, "rotates": false, "multitile": false}, {"id": "chem_saltpetre", "fg": 348, "rotates": false, "multitile": false}, {"id": "chem_sulphuric_acid", "fg": 931, "rotates": false, "multitile": false}, {"id": "chem_thermite", "fg": 908, "rotates": false, "multitile": false}, {"id": "chem_zinc_powder", "fg": 908, "rotates": false, "multitile": false}, {"id": "chipper", "fg": 753, "rotates": false, "multitile": false}, {"id": "chisel", "fg": 753, "rotates": false, "multitile": false}, {"id": "chitin_piece", "fg": 380, "rotates": false, "multitile": false}, {"id": "chitin_plate", "fg": 461, "rotates": false, "multitile": false}, {"id": "choc_drink", "fg": 1395, "rotates": false}, {"id": "circsaw_blade", "fg": 419, "rotates": false, "multitile": false}, {"id": "circsaw_off", "fg": 543, "rotates": false, "multitile": false}, {"id": "circsaw_on", "fg": 543, "rotates": false, "multitile": false}, {"id": "circuit", "fg": 950, "rotates": false, "multitile": false}, {"id": "clay_canister", "fg": 833, "rotates": false, "multitile": false}, {"id": "clay_pot", "fg": 834, "rotates": false, "multitile": false}, {"id": "clay_quern", "fg": 839, "rotates": false, "multitile": false}, {"id": "clay_teapot", "fg": 840, "rotates": false, "multitile": false}, {"id": "clay_watercont", "fg": 834, "rotates": false, "multitile": false}, {"id": "clip2", "fg": 918, "rotates": false, "multitile": false}, {"id": "clip", "fg": 918, "rotates": false, "multitile": false}, {"id": "clockworks", "fg": 419, "rotates": false, "multitile": false}, {"id": "clock", "fg": 418, "rotates": false, "multitile": false}, {"id": "clown_suit", "fg": 995, "rotates": false, "multitile": false}, {"id": "coal", "fg": 382, "rotates": false, "multitile": false}, {"id": "coffeemaker", "fg": 945, "rotates": false, "multitile": false}, {"id": "coffee", "fg": 932, "rotates": false, "multitile": false}, {"id": "coffee_syrup", "fg": 932, "rotates": false, "multitile": false}, {"id": "coilgun", "fg": 555, "rotates": false, "multitile": false}, {"id": "colamdew", "fg": 1406, "rotates": false, "multitile": false}, {"id": "cola", "fg": 932, "rotates": false, "multitile": false}, {"id": "colt_army", "fg": 518, "rotates": false, "multitile": false}, {"id": "colt_navy", "fg": 518, "rotates": false, "multitile": false}, {"id": "combatnail", "fg": 889, "rotates": false, "multitile": false}, {"id": "combatsaw_off", "fg": 600, "rotates": false, "multitile": false}, {"id": "combatsaw_on", "fg": 600, "rotates": false, "multitile": false}, {"id": "compbow", "fg": 894, "rotates": false, "multitile": false}, {"id": "compositebow", "fg": 894, "rotates": false, "multitile": false}, {"id": "concrete", "fg": 1401, "rotates": false, "multitile": false}, {"id": "controls", "fg": 881, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "control_laptop", "fg": 422, "rotates": false, "multitile": false}, {"id": "conversion_battle", "fg": 918, "rotates": false, "multitile": false}, {"id": "conversion_sniper", "fg": 918, "rotates": false, "multitile": false}, {"id": "con_mix", "fg": 849, "rotates": false, "multitile": false}, {"id": "cooking_oil", "fg": 1382, "rotates": false, "multitile": false}, {"id": "copper", "fg": 822, "rotates": false, "multitile": false}, {"id": "cop_38", "fg": 517, "rotates": false, "multitile": false}, {"id": "cordless_drill", "fg": 732, "rotates": false, "multitile": false}, {"id": "corpse", "fg": 864, "rotates": false}, {"id": "cot", "fg": 667, "rotates": false, "multitile": false}, {"id": "cow_bell", "fg": 546, "rotates": false, "multitile": false}, {"id": "crackpipe", "fg": 745, "rotates": false, "multitile": false}, {"id": "crafted_suppressor", "fg": 918, "rotates": false, "multitile": false}, {"id": "craftrig", "fg": 1478, "rotates": true}, {"id": "cranberry_juice", "fg": 1395, "rotates": false}, {"id": "creamsoda", "fg": 934, "rotates": false, "multitile": false}, {"id": "creepy_doll", "fg": 738, "rotates": false, "multitile": false}, {"id": "crossbow", "fg": 895, "rotates": false, "multitile": false}, {"id": "crossbow_trap", "fg": 607, "rotates": false, "multitile": false}, {"id": "crowbar", "fg": 594, "rotates": false, "multitile": false}, {"id": "crucible", "fg": 750, "rotates": false, "multitile": false}, {"id": "crude_brick", "fg": 841, "rotates": false, "multitile": false}, {"id": "crude_picklock", "fg": 711, "rotates": false, "multitile": false}, {"id": "cs_lajatang_off", "fg": 486, "rotates": false, "multitile": false}, {"id": "cs_lajatang_on", "fg": 486, "rotates": false, "multitile": false}, {"id": "cudgel", "fg": 725, "rotates": false, "multitile": false}, {"id": "cup_plastic", "fg": 912, "rotates": false, "multitile": false}, {"id": "curry_veggy", "fg": 1409, "rotates": false, "multitile": false}, {"id": "cu_pipe", "fg": 869, "rotates": false, "multitile": false}, {"id": "cx4", "fg": 515, "rotates": false, "multitile": false}, {"id": "c_fishspear", "fg": 678, "rotates": false, "multitile": false}, {"id": "dahlia_bud", "fg": 469, "rotates": false, "multitile": false}, {"id": "dahlia_flower", "fg": 910, "rotates": false, "multitile": false}, {"id": "damaged_shelter_kit", "fg": 726, "rotates": false, "multitile": false}, {"id": "dandelion_tea", "fg": 1382, "rotates": false, "multitile": false}, {"id": "dandelion_wine", "fg": 1382, "rotates": false, "multitile": false}, {"id": "dart", "fg": 890, "rotates": false, "multitile": false}, {"id": "deagle_44", "fg": 518, "rotates": false, "multitile": false}, {"id": "dehydrator", "fg": 497, "rotates": false, "multitile": false}, {"id": "diamond", "fg": 540, "rotates": false, "multitile": false}, {"id": "diamond_bayonet", "fg": 918, "rotates": false, "multitile": false}, {"id": "diamond_broadsword", "fg": 847, "rotates": false, "multitile": false}, {"id": "diamond_katana", "fg": 683, "rotates": false, "multitile": false}, {"id": "diamond_knife", "fg": 688, "rotates": false, "multitile": false}, {"id": "diamond_kukri", "fg": 683, "rotates": false, "multitile": false}, {"id": "diamond_machete", "fg": 687, "rotates": false, "multitile": false}, {"id": "diamond_nodachi", "fg": 683, "rotates": false, "multitile": false}, {"id": "diamond_pistol_bayonet", "fg": 918, "rotates": false, "multitile": false}, {"id": "diamond_rapier", "fg": 848, "rotates": false, "multitile": false}, {"id": "diamond_sword_bayonet", "fg": 918, "rotates": false, "multitile": false}, {"id": "diamond_wakizashi", "fg": 683, "rotates": false, "multitile": false}, {"id": "diamond_zweihander", "fg": 847, "rotates": false, "multitile": false}, {"id": "diesel", "fg": 934, "rotates": false, "multitile": false}, {"id": "digging_stick", "fg": 424, "rotates": false, "multitile": false}, {"id": "directional_antenna", "fg": 588, "rotates": false, "multitile": false}, {"id": "distaff_spindle", "fg": 977, "rotates": false, "multitile": false}, {"id": "diveknife", "fg": 690, "rotates": false, "multitile": false}, {"id": "dogfood", "fg": 1375, "rotates": false, "multitile": false}, {"id": "dog_whistle", "fg": 664, "rotates": false, "multitile": false}, {"id": "door_opaque", "fg": 1456, "rotates": false}, {"id": "doublespeargun", "fg": 526, "rotates": false, "multitile": false}, {"id": "down_feather", "fg": 891, "rotates": false, "multitile": false}, {"id": "drink_beeknees", "fg": 1382, "rotates": false, "multitile": false}, {"id": "drink_hobo", "fg": 932, "rotates": false, "multitile": false}, {"id": "drink_kalimotxo", "fg": 1409, "rotates": false, "multitile": false}, {"id": "drink_rumcola", "fg": 932, "rotates": false, "multitile": false}, {"id": "drink_screwdriver", "fg": 933, "rotates": false, "multitile": false}, {"id": "drink_sewerbrew", "fg": 932, "rotates": false, "multitile": false}, {"id": "drink_wild_apple", "fg": 1406, "rotates": false, "multitile": false}, {"id": "drink_wsour", "fg": 1382, "rotates": false, "multitile": false}, {"id": "drive_by_wire_controls", "fg": 1443, "rotates": false, "multitile": false}, {"id": "DRUM", "fg": 359, "rotates": false, "multitile": false}, {"id": "duct_tape", "fg": 900, "rotates": false, "multitile": false}, {"id": "dump_pouch", "fg": 1230, "rotates": false, "multitile": false}, {"id": "dynamite", "fg": 638, "rotates": false, "multitile": false}, {"id": "dynamite_act", "fg": 639, "rotates": false, "multitile": false}, {"id": "dynamite_radio", "fg": 800, "rotates": false, "multitile": false}, {"id": "dynamite_radio_act", "fg": 801, "rotates": false, "multitile": false}, {"id": "ear_spool", "fg": 943, "rotates": false, "multitile": false}, {"id": "ecig", "fg": 373, "rotates": false, "multitile": false}, {"id": "eink_tablet_pc", "fg": 718, "rotates": false, "multitile": false}, {"id": "electrohack", "fg": 367, "rotates": false, "multitile": false}, {"id": "elec_chainsaw_off", "fg": 599, "rotates": false, "multitile": false}, {"id": "elec_chainsaw_on", "fg": 599, "rotates": false, "multitile": false}, {"id": "elec_jackhammer", "fg": 601, "rotates": false, "multitile": false}, {"id": "element", "fg": 400, "rotates": false, "multitile": false}, {"id": "EMPbomb", "fg": 625, "rotates": false, "multitile": false}, {"id": "EMPbomb_act", "fg": 626, "rotates": false, "multitile": false}, {"id": "energy_drink", "fg": 1407, "rotates": false, "multitile": false}, {"id": "energy_drink_atomic", "fg": 1406, "rotates": false, "multitile": false}, {"id": "etched_skull", "fg": 659, "rotates": false, "multitile": false}, {"id": "european_pilsner", "fg": 932, "rotates": false, "multitile": false}, {"id": "explosive_hm_rocket", "fg": 823, "rotates": false, "multitile": false}, {"id": "extinguisher", "fg": 570, "rotates": false, "multitile": false}, {"id": "e_scrap", "fg": 951, "rotates": false, "multitile": false}, {"id": "e_tool", "fg": 596, "rotates": false, "multitile": false}, {"id": "fan", "fg": 406, "rotates": false, "multitile": false}, {"id": "feather", "fg": 891, "rotates": false, "multitile": false}, {"id": "felt_patch", "fg": 477, "rotates": false}, {"id": "fencing_epee", "fg": 679, "rotates": false, "multitile": false}, {"id": "fencing_foil", "fg": 679, "rotates": false, "multitile": false}, {"id": "fencing_sabre", "fg": 679, "rotates": false, "multitile": false}, {"id": "fertilizer", "fg": 1326, "rotates": false, "multitile": false}, {"id": "fertilizer_bomb", "fg": 805, "rotates": false, "multitile": false}, {"id": "fertilizer_bomb_act", "fg": 806, "rotates": false, "multitile": false}, {"id": "fertilizer_liquid", "fg": 931, "rotates": false, "multitile": false}, {"id": "fighter_sting", "fg": 481, "rotates": false, "multitile": false}, {"id": "file", "fg": 899, "rotates": false, "multitile": false}, {"id": "firecracker", "fg": 642, "rotates": false, "multitile": false}, {"id": "firecracker_act", "fg": 643, "rotates": false, "multitile": false}, {"id": "firecracker_pack", "fg": 640, "rotates": false, "multitile": false}, {"id": "firecracker_pack_act", "fg": 641, "rotates": false, "multitile": false}, {"id": "firekatana_off", "fg": 676, "rotates": false, "multitile": false}, {"id": "firekatana_on", "fg": 677, "rotates": false, "multitile": false}, {"id": "firemachete_off", "fg": 673, "rotates": false, "multitile": false}, {"id": "firemachete_on", "fg": 674, "rotates": false, "multitile": false}, {"id": "fire_ax", "fg": 487, "rotates": false, "multitile": false}, {"id": "fire_drill", "fg": 565, "rotates": false, "multitile": false}, {"id": "fire_drill_large", "fg": 565, "rotates": false, "multitile": false}, {"id": "fishing_hook_basic", "fg": 532, "rotates": false, "multitile": false}, {"id": "fishing_rod_basic", "fg": 531, "rotates": false, "multitile": false}, {"id": "fishing_rod_professional", "fg": 808, "rotates": false, "multitile": false}, {"id": "fishspear", "fg": 680, "rotates": false, "multitile": false}, {"id": "fish_bowl", "fg": 475, "rotates": false, "multitile": false}, {"id": "fish_trap", "fg": 584, "rotates": false, "multitile": false}, {"id": "flamable_arrow", "fg": 633, "rotates": false, "multitile": false}, {"id": "flamethrower", "fg": 558, "rotates": false, "multitile": false}, {"id": "flamethrower_crude", "fg": 559, "rotates": false, "multitile": false}, {"id": "flamethrower_simple", "fg": 558, "rotates": false, "multitile": false}, {"id": "flaregun", "fg": 513, "rotates": false, "multitile": false}, {"id": "flashbang", "fg": 623, "rotates": false, "multitile": false}, {"id": "flashbang_act", "fg": 624, "rotates": false, "multitile": false}, {"id": "flashlight", "fg": 574, "rotates": false, "multitile": false}, {"id": "flashlight_on", "fg": 575, "rotates": false, "multitile": false}, {"id": "flask_glass", "fg": 352, "rotates": false, "multitile": false}, {"id": "flask_hip", "fg": 973, "rotates": false, "multitile": false}, {"id": "flask_yeast", "fg": 352, "rotates": false, "multitile": false}, {"id": "fletching", "fg": 892, "rotates": false, "multitile": false}, {"id": "flintlock_ammo", "fg": 521, "rotates": false, "multitile": false}, {"id": "floodlight", "fg": 1510, "rotates": false}, {"id": "flyer", "fg": 899, "rotates": false, "multitile": false}, {"id": "fn57", "fg": 518, "rotates": false, "multitile": false}, {"id": "fn_fal", "fg": 551, "rotates": false, "multitile": false}, {"id": "fn_p90", "fg": 536, "rotates": false, "multitile": false}, {"id": "foldframe", "fg": 923, "rotates": false}, {"id": "folding_basket", "fg": 842, "rotates": false}, {"id": "folding_bicycle", "fg": 740, "rotates": false, "multitile": false}, {"id": "foon", "fg": 414, "rotates": false, "multitile": false}, {"id": "football", "fg": 922, "rotates": false, "multitile": false}, {"id": "foot_crank", "fg": 453, "rotates": false, "multitile": false}, {"id": "forgerig", "fg": 879, "rotates": false}, {"id": "forge", "fg": 501, "rotates": false, "multitile": false}, {"id": "fork", "fg": 414, "rotates": false, "multitile": false}, {"id": "frame", "fg": 670, "rotates": false}, {"id": "frame_wood", "fg": 925, "rotates": false}, {"id": "frame_wood_light", "fg": 925, "rotates": false}, {"id": "ftk93", "fg": 556, "rotates": false, "multitile": false}, {"id": "funnel", "fg": 701, "rotates": false, "multitile": false}, {"id": "fur_cat_tail", "fg": 523, "rotates": false}, {"id": "gasbomb", "fg": 629, "rotates": false, "multitile": false}, {"id": "gasbomb_act", "fg": 630, "rotates": false, "multitile": false}, {"id": "gasdiscount_gold", "fg": 368, "rotates": false, "multitile": false}, {"id": "gasdiscount_platinum", "fg": 820, "rotates": false, "multitile": false}, {"id": "gasdiscount_silver", "fg": 820, "rotates": false, "multitile": false}, {"id": "gasoline", "fg": 934, "rotates": false, "multitile": false}, {"id": "gasoline_lantern", "fg": 927, "rotates": false, "multitile": false}, {"id": "gasoline_lantern_on", "fg": 928, "rotates": false, "multitile": false}, {"id": "geiger_off", "fg": 613, "rotates": false, "multitile": false}, {"id": "geiger_on", "fg": 614, "rotates": false, "multitile": false}, {"id": "generic_no_ammo", "fg": 953, "rotates": false, "multitile": false}, {"id": "gin", "fg": 931, "rotates": false, "multitile": false}, {"id": "glass", "fg": 412, "rotates": false, "multitile": false}, {"id": "glass_bowl", "fg": 411, "rotates": false, "multitile": false}, {"id": "glass_macuahuitl", "fg": 880, "rotates": false, "multitile": false}, {"id": "glass_plate", "fg": 410, "rotates": false, "multitile": false}, {"id": "glass_shard", "fg": 913, "rotates": false, "multitile": false}, {"id": "glass_sheet", "fg": 376, "rotates": false, "multitile": false}, {"id": "glass_shiv", "fg": 688, "rotates": false, "multitile": false}, {"id": "glock_19", "fg": 518, "rotates": false, "multitile": false}, {"id": "glowstick", "fg": 579, "rotates": false, "multitile": false}, {"id": "glowstick_dead", "fg": 581, "rotates": false, "multitile": false}, {"id": "glowstick_lit", "fg": 580, "rotates": false, "multitile": false}, {"id": "gold", "fg": 1256, "rotates": false, "multitile": false}, {"id": "gold_small", "fg": 905, "rotates": false, "multitile": false}, {"id": "golf_club", "fg": 483, "rotates": false, "multitile": false}, {"id": "granade", "fg": 621, "rotates": false, "multitile": false}, {"id": "granade_act", "fg": 622, "rotates": false, "multitile": false}, {"id": "grapnel", "fg": 774, "rotates": false, "multitile": false}, {"id": "grenade", "fg": 619, "rotates": false, "multitile": false}, {"id": "grenade_act", "fg": 620, "rotates": false, "multitile": false}, {"id": "grenade_inc", "fg": 764, "rotates": false, "multitile": false}, {"id": "grenade_inc_act", "fg": 765, "rotates": false, "multitile": false}, {"id": "grip", "fg": 918, "rotates": false, "multitile": false}, {"id": "GUITAR", "fg": 358, "rotates": false, "multitile": false}, {"id": "gunpowder", "fg": 908, "rotates": false, "multitile": false}, {"id": "gun_crossbow", "fg": 918, "rotates": false, "multitile": false}, {"id": "g_carpet", "fg": 761, "rotates": false}, {"id": "g_paint", "fg": 1397, "rotates": false, "multitile": false}, {"id": "g_shovel", "fg": 596, "rotates": false, "multitile": false}, {"id": "h&k416a5", "fg": 550, "rotates": false, "multitile": false}, {"id": "hacksaw", "fg": 695, "rotates": false, "multitile": false}, {"id": "halligan", "fg": 594, "rotates": false, "multitile": false}, {"id": "hammer", "fg": 569, "rotates": false, "multitile": false}, {"id": "hammer_sledge", "fg": 432, "rotates": false, "multitile": false}, {"id": "handflare", "fg": 929, "rotates": false, "multitile": false}, {"id": "handflare_dead", "fg": 938, "rotates": false, "multitile": false}, {"id": "handflare_lit", "fg": 930, "rotates": false, "multitile": false}, {"id": "hand_rims", "fg": 783, "rotates": false, "multitile": false}, {"id": "hard_plate", "fg": 464, "rotates": false, "multitile": false}, {"id": "hatchet", "fg": 694, "rotates": false, "multitile": false}, {"id": "hb_beer", "fg": 932, "rotates": false, "multitile": false}, {"id": "hdframe", "fg": 924, "rotates": false}, {"id": "hd_steel_drum", "fg": 947, "rotates": false}, {"id": "headlight_reinforced", "fg": 916, "rotates": false}, {"id": "heatpack", "fg": 727, "rotates": false, "multitile": false}, {"id": "heatpack_used", "fg": 728, "rotates": false, "multitile": false}, {"id": "heavy_rail_rifle", "fg": 536, "rotates": false, "multitile": false}, {"id": "heavy_snare_kit", "fg": 610, "rotates": false, "multitile": false}, {"id": "helmet_chitin", "fg": 1145, "rotates": false, "multitile": false}, {"id": "helmet_liner", "fg": 1142, "rotates": false, "multitile": false}, {"id": "helmet_lobster", "fg": 1136, "rotates": false, "multitile": false}, {"id": "helmet_lobster", "fg": 1003, "rotates": false, "multitile": false}, {"id": "helmet_motor", "fg": 993, "rotates": false, "multitile": false}, {"id": "helmet_netting", "fg": 1129, "rotates": false, "multitile": false}, {"id": "helmet_nomad", "fg": 1142, "rotates": false, "multitile": false}, {"id": "helmet_plate", "fg": 1146, "rotates": false, "multitile": false}, {"id": "helmet_riot", "fg": 1143, "rotates": false, "multitile": false}, {"id": "helmet_skid", "fg": 1139, "rotates": false, "multitile": false}, {"id": "helsing", "fg": 536, "rotates": false, "multitile": false}, {"id": "herbal_tea", "fg": 1410, "rotates": false, "multitile": false}, {"id": "hk_g36", "fg": 550, "rotates": false, "multitile": false}, {"id": "hk_g3", "fg": 550, "rotates": false, "multitile": false}, {"id": "hk_g80", "fg": 556, "rotates": false, "multitile": false}, {"id": "hk_mp5", "fg": 516, "rotates": false, "multitile": false}, {"id": "hk_mp7", "fg": 516, "rotates": false, "multitile": false}, {"id": "hk_ucp", "fg": 518, "rotates": false, "multitile": false}, {"id": "hk_ump45", "fg": 516, "rotates": false, "multitile": false}, {"id": "hockey_stick", "fg": 478, "rotates": false, "multitile": false}, {"id": "hoe", "fg": 595, "rotates": false, "multitile": false}, {"id": "holo_sight", "fg": 918, "rotates": false, "multitile": false}, {"id": "holster", "fg": 1156, "rotates": false, "multitile": false}, {"id": "holy_symbol", "fg": 1163, "rotates": false, "multitile": false}, {"id": "homewrecker", "fg": 434, "rotates": false, "multitile": false}, {"id": "honey_glassed", "fg": 416, "rotates": false, "multitile": false}, {"id": "honey_gold", "fg": 1382, "rotates": false, "multitile": false}, {"id": "honey_scraper", "fg": 690, "rotates": false, "multitile": false}, {"id": "hood_fsurvivor", "fg": 1144, "rotates": false, "multitile": false}, {"id": "hood_h20survivor", "fg": 1144, "rotates": false, "multitile": false}, {"id": "hood_lsurvivor", "fg": 1188, "rotates": false, "multitile": false}, {"id": "hood_survivor", "fg": 1190, "rotates": false, "multitile": false}, {"id": "hood_xlsurvivor", "fg": 1190, "rotates": false, "multitile": false}, {"id": "horn_bicycle", "fg": 875, "rotates": false}, {"id": "horn_big", "fg": 875, "rotates": false}, {"id": "horn_car", "fg": 875, "rotates": false}, {"id": "hose", "fg": 598, "rotates": false, "multitile": false}, {"id": "hotplate", "fg": 582, "rotates": false, "multitile": false}, {"id": "house_coat", "fg": 1173, "rotates": false, "multitile": false}, {"id": "hsurvivor_suit", "fg": 1201, "rotates": false, "multitile": false}, {"id": "huge_crossbow", "fg": 895, "rotates": false, "multitile": false}, {"id": "human_pickled", "fg": 1297, "rotates": false, "multitile": false}, {"id": "hygrometer", "fg": 850, "rotates": false, "multitile": false}, {"id": "i4_combustion", "fg": 873, "rotates": false, "multitile": false}, {"id": "i6_diesel", "fg": 873, "rotates": false, "multitile": false}, {"id": "id_military", "fg": 366, "rotates": false, "multitile": false}, {"id": "id_science", "fg": 365, "rotates": false, "multitile": false}, {"id": "imperial_stout", "fg": 932, "rotates": false, "multitile": false}, {"id": "improve_sights", "fg": 918, "rotates": false, "multitile": false}, {"id": "incendiary", "fg": 908, "rotates": false, "multitile": false}, {"id": "incendiary_hm_rocket", "fg": 824, "rotates": false, "multitile": false}, {"id": "india_pale_ale", "fg": 932, "rotates": false, "multitile": false}, {"id": "irish_coffee", "fg": 932, "rotates": false, "multitile": false}, {"id": "it_battery_mount", "fg": 571, "rotates": false, "multitile": false}, {"id": "iv_mutagen", "fg": 1410, "rotates": false, "multitile": false}, {"id": "iv_mutagen_alpha", "fg": 1410, "rotates": false, "multitile": false}, {"id": "iv_mutagen_beast", "fg": 1410, "rotates": false, "multitile": false}, {"id": "iv_mutagen_bird", "fg": 1410, "rotates": false, "multitile": false}, {"id": "iv_mutagen_cattle", "fg": 1410, "rotates": false, "multitile": false}, {"id": "iv_mutagen_cephalopod", "fg": 1410, "rotates": false, "multitile": false}, {"id": "iv_mutagen_chimera", "fg": 1410, "rotates": false, "multitile": false}, {"id": "iv_mutagen_elfa", "fg": 1410, "rotates": false, "multitile": false}, {"id": "iv_mutagen_feline", "fg": 1410, "rotates": false, "multitile": false}, {"id": "iv_mutagen_fish", "fg": 1410, "rotates": false, "multitile": false}, {"id": "iv_mutagen_insect", "fg": 1410, "rotates": false, "multitile": false}, {"id": "iv_mutagen_lizard", "fg": 1410, "rotates": false, "multitile": false}, {"id": "iv_mutagen_lupine", "fg": 1410, "rotates": false, "multitile": false}, {"id": "iv_mutagen_medical", "fg": 1410, "rotates": false, "multitile": false}, {"id": "iv_mutagen_plant", "fg": 1410, "rotates": false, "multitile": false}, {"id": "iv_mutagen_raptor", "fg": 1410, "rotates": false, "multitile": false}, {"id": "iv_mutagen_rat", "fg": 1410, "rotates": false, "multitile": false}, {"id": "iv_mutagen_slime", "fg": 1410, "rotates": false, "multitile": false}, {"id": "iv_mutagen_spider", "fg": 1410, "rotates": false, "multitile": false}, {"id": "iv_mutagen_troglobite", "fg": 1410, "rotates": false, "multitile": false}, {"id": "iv_mutagen_ursine", "fg": 1410, "rotates": false, "multitile": false}, {"id": "iv_purifier", "fg": 1407, "rotates": false, "multitile": false}, {"id": "i_staff", "fg": 450, "rotates": false, "multitile": false}, {"id": "jacket_chef", "fg": 1093, "rotates": false, "multitile": false}, {"id": "jackhammer", "fg": 601, "rotates": false, "multitile": false}, {"id": "jack", "fg": 504, "rotates": false, "multitile": false}, {"id": "jacqueshammer", "fg": 602, "rotates": false, "multitile": false}, {"id": "jar_3l_glass", "fg": 356, "rotates": false, "multitile": false}, {"id": "jar_apple_canned", "fg": 1398, "rotates": false, "multitile": false}, {"id": "jar_fish_canned", "fg": 1400, "rotates": false, "multitile": false}, {"id": "jar_fish_pickled", "fg": 1400, "rotates": false, "multitile": false}, {"id": "jar_glass", "fg": 355, "rotates": false, "multitile": false}, {"id": "jar_human_canned", "fg": 1396, "rotates": false, "multitile": false}, {"id": "jar_human_pickled", "fg": 1400, "rotates": false, "multitile": false}, {"id": "jar_kompot", "fg": 355, "rotates": false, "multitile": false}, {"id": "jar_meat_canned", "fg": 1396, "rotates": false, "multitile": false}, {"id": "jar_meat_pickled", "fg": 1400, "rotates": false, "multitile": false}, {"id": "jar_tomato_canned", "fg": 1396, "rotates": false, "multitile": false}, {"id": "jar_veggy_canned", "fg": 1397, "rotates": false, "multitile": false}, {"id": "jar_veggy_pickled", "fg": 1399, "rotates": false, "multitile": false}, {"id": "javelin", "fg": 449, "rotates": false, "multitile": false}, {"id": "javelin_iron", "fg": 680, "rotates": false, "multitile": false}, {"id": "jerrycan", "fg": 350, "rotates": false, "multitile": false}, {"id": "jerrycan_big", "fg": 354, "rotates": false, "multitile": false}, {"id": "judo_belt_black", "fg": 1554, "rotates": false, "multitile": false}, {"id": "judo_belt_blue", "fg": 1000, "rotates": false, "multitile": false}, {"id": "judo_belt_brown", "fg": 1001, "rotates": false, "multitile": false}, {"id": "judo_belt_green", "fg": 999, "rotates": false, "multitile": false}, {"id": "judo_belt_orange", "fg": 998, "rotates": false, "multitile": false}, {"id": "judo_belt_white", "fg": 996, "rotates": false, "multitile": false}, {"id": "judo_belt_yellow", "fg": 997, "rotates": false, "multitile": false}, {"id": "jug_clay", "fg": 835, "rotates": false, "multitile": false}, {"id": "jug_plastic", "fg": 351, "rotates": false, "multitile": false}, {"id": "juice", "fg": 933, "rotates": false, "multitile": false}, {"id": "katana", "fg": 675, "rotates": false, "multitile": false}, {"id": "katana_fake", "fg": 675, "rotates": false, "multitile": false}, {"id": ["katana", "katana_fake", "katana_inferior"], "fg": 860, "rotates": false}, {"id": "keg", "fg": 947, "rotates": false, "multitile": false}, {"id": "kevlar_harness", "fg": 537, "rotates": false, "multitile": false}, {"id": "kevlar_plate", "fg": 717, "rotates": false, "multitile": false}, {"id": "kiln_done", "fg": 778, "rotates": false, "multitile": false}, {"id": "kiln_full", "fg": 776, "rotates": false, "multitile": false}, {"id": "kiln_lit", "fg": 777, "rotates": false, "multitile": false}, {"id": "kitchen_unit", "fg": 865, "rotates": false, "multitile": false}, {"id": "knife_butcher", "fg": 690, "rotates": false, "multitile": false}, {"id": "knife_butter", "fg": 379, "rotates": false, "multitile": false}, {"id": "knife_combat", "fg": 690, "rotates": false, "multitile": false}, {"id": "knife_hunting", "fg": 690, "rotates": false, "multitile": false}, {"id": "knife_rambo", "fg": 690, "rotates": false, "multitile": false}, {"id": "knife_rm42", "fg": 690, "rotates": false, "multitile": false}, {"id": "knife_steak", "fg": 690, "rotates": false, "multitile": false}, {"id": "knife_swissarmy", "fg": 790, "rotates": false, "multitile": false}, {"id": "knife_trench", "fg": 690, "rotates": false, "multitile": false}, {"id": "knitting_needles", "fg": 424, "rotates": false, "multitile": false}, {"id": "knuckle_brass", "fg": 398, "rotates": false, "multitile": false}, {"id": "knuckle_katar", "fg": 479, "rotates": false, "multitile": false}, {"id": "knuckle_nail", "fg": 479, "rotates": false, "multitile": false}, {"id": "knuckle_steel", "fg": 476, "rotates": false, "multitile": false}, {"id": "kompot", "fg": 931, "rotates": false, "multitile": false}, {"id": "kris", "fg": 690, "rotates": false, "multitile": false}, {"id": "kris_fake", "fg": 690, "rotates": false, "multitile": false}, {"id": "kukri", "fg": 675, "rotates": false, "multitile": false}, {"id": "lajatang", "fg": 470, "rotates": false, "multitile": false}, {"id": "lamp_oil", "fg": 1382, "rotates": false, "multitile": false}, {"id": "landmine", "fg": 612, "rotates": false, "multitile": false}, {"id": "laptop", "fg": 405, "rotates": false, "multitile": false}, {"id": "largebroketent", "fg": 399, "rotates": false, "multitile": false}, {"id": "large_repairkit", "fg": 939, "rotates": false, "multitile": false}, {"id": "large_tent_kit", "fg": 245, "rotates": false, "multitile": false}, {"id": "laser_cannon", "fg": 557, "rotates": false, "multitile": false}, {"id": "laser_capacitor", "fg": 901, "rotates": false, "multitile": false}, {"id": "laser_pack", "fg": 907, "rotates": false, "multitile": false}, {"id": "laser_rifle", "fg": 556, "rotates": false, "multitile": false}, {"id": "laser_sight", "fg": 918, "rotates": false, "multitile": false}, {"id": "launcher_simple", "fg": 560, "rotates": false, "multitile": false}, {"id": "lawnmower", "fg": 397, "rotates": false, "multitile": false}, {"id": "lawn_dart", "fg": 897, "rotates": false, "multitile": false}, {"id": "LAW", "fg": 563, "rotates": false, "multitile": false}, {"id": "LAW_Packed", "fg": 563, "rotates": false, "multitile": false}, {"id": "lead", "fg": 904, "rotates": false, "multitile": false}, {"id": "lead_plate", "fg": 459, "rotates": false, "multitile": false}, {"id": "leather_cat_tail", "fg": 523, "rotates": false}, {"id": "leather_funnel", "fg": 818, "rotates": false, "multitile": false}, {"id": "lemonlime", "fg": 934, "rotates": false, "multitile": false}, {"id": "lens", "fg": 370, "rotates": false, "multitile": false}, {"id": "lgpistol_primer", "fg": 909, "rotates": false, "multitile": false}, {"id": "lgrifle_primer", "fg": 909, "rotates": false, "multitile": false}, {"id": "lighter", "fg": 868, "rotates": true}, {"id": "lightstrip", "fg": 578, "rotates": false, "multitile": false}, {"id": "lightstrip_dead", "fg": 576, "rotates": false, "multitile": false}, {"id": "lightstrip_inactive", "fg": 577, "rotates": false, "multitile": false}, {"id": "light_emergency_blue", "fg": 872, "rotates": false}, {"id": "light_emergency_red", "fg": 871, "rotates": false}, {"id": "light_snare_kit", "fg": 610, "rotates": false, "multitile": false}, {"id": "lobotomizer", "fg": 851, "rotates": false, "multitile": false}, {"id": "log", "fg": 393, "rotates": false, "multitile": false}, {"id": "longbow", "fg": 894, "rotates": false, "multitile": false}, {"id": "long_island", "fg": 932, "rotates": false, "multitile": false}, {"id": "lye_powder", "fg": 348, "rotates": false, "multitile": false}, {"id": "l_bak_223", "fg": 518, "rotates": false, "multitile": false}, {"id": "l_base_223", "fg": 515, "rotates": false, "multitile": false}, {"id": "l_car_223", "fg": 515, "rotates": false, "multitile": false}, {"id": "l_car_223_kit", "fg": 918, "rotates": false, "multitile": false}, {"id": "l_def_12", "fg": 528, "rotates": false, "multitile": false}, {"id": "l_dsr_223", "fg": 515, "rotates": false, "multitile": false}, {"id": "l_dsr_223_kit", "fg": 918, "rotates": false, "multitile": false}, {"id": "l_enforcer_45", "fg": 518, "rotates": false, "multitile": false}, {"id": "l_HFPack", "fg": 939, "rotates": false, "multitile": false}, {"id": "l_lmg_223", "fg": 515, "rotates": false, "multitile": false}, {"id": "l_lmg_223_kit", "fg": 918, "rotates": false, "multitile": false}, {"id": "l_long_45", "fg": 509, "rotates": false, "multitile": false}, {"id": "l_lookout_9mm", "fg": 518, "rotates": false, "multitile": false}, {"id": "l_mbr_223", "fg": 515, "rotates": false, "multitile": false}, {"id": "l_mbr_223_kit", "fg": 918, "rotates": false, "multitile": false}, {"id": "l_mp_45", "fg": 518, "rotates": false, "multitile": false}, {"id": "l_mp_9mm", "fg": 518, "rotates": false, "multitile": false}, {"id": "l_sp_45", "fg": 518, "rotates": false, "multitile": false}, {"id": "l_sp_9mm", "fg": 518, "rotates": false, "multitile": false}, {"id": "m1014", "fg": 528, "rotates": false, "multitile": false}, {"id": "m107a1", "fg": 550, "rotates": false, "multitile": false}, {"id": "m14a", "fg": 509, "rotates": false, "multitile": false}, {"id": "m14ebr", "fg": 515, "rotates": false, "multitile": false}, {"id": "m1911", "fg": 518, "rotates": false, "multitile": false}, {"id": "m2010", "fg": 515, "rotates": false, "multitile": false}, {"id": "m202_flash", "fg": 563, "rotates": false, "multitile": false}, {"id": "m203", "fg": 918, "rotates": false, "multitile": false}, {"id": "m235tpa", "fg": 959, "rotates": false, "multitile": false}, {"id": "m249", "fg": 554, "rotates": false, "multitile": false}, {"id": "m27iar", "fg": 550, "rotates": false, "multitile": false}, {"id": "m2browning", "fg": 528, "rotates": false, "multitile": false}, {"id": "m2browning_sawn", "fg": 528, "rotates": false, "multitile": false}, {"id": "m320", "fg": 560, "rotates": false, "multitile": false}, {"id": "m320_mod", "fg": 918, "rotates": false, "multitile": false}, {"id": "m3_carlgustav", "fg": 563, "rotates": false, "multitile": false}, {"id": "m4a1", "fg": 550, "rotates": false, "multitile": false}, {"id": "m79", "fg": 561, "rotates": false, "multitile": false}, {"id": "m9", "fg": 518, "rotates": false, "multitile": false}, {"id": "mace", "fg": 445, "rotates": false, "multitile": false}, {"id": "machete", "fg": 672, "rotates": false, "multitile": false}, {"id": "mac_10", "fg": 516, "rotates": false, "multitile": false}, {"id": "magnifying_glass", "fg": 819, "rotates": false, "multitile": false}, {"id": "makeshift_crowbar", "fg": 594, "rotates": false, "multitile": false}, {"id": "makeshift_funnel", "fg": 702, "rotates": false, "multitile": false}, {"id": "makeshift_halberd", "fg": 689, "rotates": false, "multitile": false}, {"id": "makeshift_knife", "fg": 690, "rotates": false, "multitile": false}, {"id": "makeshift_machete", "fg": 686, "rotates": false, "multitile": false}, {"id": "manhole_cover", "fg": 1815, "rotates": false, "multitile": false}, {"id": "marble", "fg": 902, "rotates": false, "multitile": false}, {"id": "mark19", "fg": 528, "rotates": false, "multitile": false}, {"id": "marlin_9a", "fg": 509, "rotates": false, "multitile": false}, {"id": "masterkey", "fg": 918, "rotates": false, "multitile": false}, {"id": "matchbomb", "fg": 547, "rotates": false, "multitile": false}, {"id": "matchbomb_act", "fg": 548, "rotates": false, "multitile": false}, {"id": "matches", "fg": 867, "rotates": true}, {"id": "match_trigger", "fg": 918, "rotates": false, "multitile": false}, {"id": "material_cement", "fg": 908, "rotates": false, "multitile": false}, {"id": "material_limestone", "fg": 904, "rotates": false, "multitile": false}, {"id": "material_shrd_limestone", "fg": 793, "rotates": false, "multitile": false}, {"id": "mead", "fg": 1382, "rotates": false, "multitile": false}, {"id": "meat_pickled", "fg": 1297, "rotates": false, "multitile": false}, {"id": "medical_gauze", "fg": 737, "rotates": false, "multitile": false}, {"id": "medical_tape", "fg": 900, "rotates": false, "multitile": false}, {"id": "medium_storage_battery", "fg": 874, "rotates": false}, {"id": "mess_kit", "fg": 791, "rotates": false, "multitile": false}, {"id": "metal_smoother", "fg": 389, "rotates": false, "multitile": false}, {"id": "metal_tank", "fg": 454, "rotates": false, "multitile": false}, {"id": "metal_tank_little", "fg": 454, "rotates": false, "multitile": false}, {"id": "metal_tank_small", "fg": 454, "rotates": false, "multitile": false}, {"id": "mgl", "fg": 554, "rotates": false, "multitile": false}, {"id": "microwave", "fg": 404, "rotates": false, "multitile": false}, {"id": "militarymap", "fg": 593, "rotates": false, "multitile": false}, {"id": "milk", "fg": 1408, "rotates": false, "multitile": false}, {"id": "mil_mess_kit", "fg": 791, "rotates": false, "multitile": false}, {"id": "mil_plate", "fg": 462, "rotates": false, "multitile": false}, {"id": "minifridge", "fg": 866, "rotates": false}, {"id": "mininuke", "fg": 644, "rotates": false, "multitile": false}, {"id": "mininuke_act", "fg": 645, "rotates": false, "multitile": false}, {"id": "mininuke_launcher", "fg": 563, "rotates": false, "multitile": false}, {"id": "mininuke_mod", "fg": 644, "rotates": false, "multitile": false}, {"id": "minireactor", "fg": 455, "rotates": false, "multitile": false}, {"id": "minispeargun", "fg": 514, "rotates": false, "multitile": false}, {"id": "mirror", "fg": 719, "rotates": false, "multitile": false}, {"id": "misc_repairkit", "fg": 939, "rotates": false, "multitile": false}, {"id": "mjolnir", "fg": 446, "rotates": false, "multitile": false}, {"id": "mobile_memory_card", "fg": 794, "rotates": false, "multitile": false}, {"id": "mobile_memory_card_encrypted", "fg": 794, "rotates": false, "multitile": false}, {"id": "mobile_memory_card_science", "fg": 794, "rotates": false, "multitile": false}, {"id": "mobile_memory_card_used", "fg": 794, "rotates": false, "multitile": false}, {"id": "molasses", "fg": 932, "rotates": false, "multitile": false}, {"id": "mold_plastic", "fg": 743, "rotates": false, "multitile": false}, {"id": "molotov", "fg": 634, "rotates": false, "multitile": false}, {"id": "molotov_lit", "fg": 635, "rotates": false, "multitile": false}, {"id": "money_bundle", "fg": 498, "rotates": false}, {"id": "moonshine", "fg": 932, "rotates": false, "multitile": false}, {"id": "mop", "fg": 709, "rotates": false, "multitile": false}, {"id": "morningstar", "fg": 446, "rotates": false, "multitile": false}, {"id": "mortar_build", "fg": 1401, "rotates": false, "multitile": false}, {"id": "mosin44", "fg": 509, "rotates": false, "multitile": false}, {"id": "mosin91_30", "fg": 509, "rotates": false, "multitile": false}, {"id": "mossberg_500", "fg": 528, "rotates": false, "multitile": false}, {"id": "moss_brownie", "fg": 517, "rotates": false, "multitile": false}, {"id": "motor", "fg": 451, "rotates": false, "multitile": false}, {"id": "motor_large", "fg": 451, "rotates": false, "multitile": false}, {"id": "motor_small", "fg": 451, "rotates": false, "multitile": false}, {"id": "mp3", "fg": 655, "rotates": false, "multitile": false}, {"id": "mp3_on", "fg": 656, "rotates": false, "multitile": false}, {"id": "muffler", "fg": 436, "rotates": false, "multitile": false}, {"id": "multitool", "fg": 790, "rotates": false, "multitile": false}, {"id": "multi_cooker", "fg": 1565, "rotates": false, "multitile": false}, {"id": "music_cd", "fg": 773, "rotates": false}, {"id": "mutagen", "fg": 1304, "rotates": false, "multitile": false}, {"id": "mutagen_alpha", "fg": 1304, "rotates": false, "multitile": false}, {"id": "mutagen_beast", "fg": 1304, "rotates": false, "multitile": false}, {"id": "mutagen_bird", "fg": 1304, "rotates": false, "multitile": false}, {"id": "mutagen_cattle", "fg": 1304, "rotates": false, "multitile": false}, {"id": "mutagen_cephalopod", "fg": 1304, "rotates": false, "multitile": false}, {"id": "mutagen_chimera", "fg": 1304, "rotates": false, "multitile": false}, {"id": "mutagen_elfa", "fg": 1304, "rotates": false, "multitile": false}, {"id": "mutagen_feline", "fg": 1304, "rotates": false, "multitile": false}, {"id": "mutagen_fish", "fg": 1304, "rotates": false, "multitile": false}, {"id": "mutagen_insect", "fg": 1304, "rotates": false, "multitile": false}, {"id": "mutagen_lizard", "fg": 1304, "rotates": false, "multitile": false}, {"id": "mutagen_lupine", "fg": 1304, "rotates": false, "multitile": false}, {"id": "mutagen_medical", "fg": 1304, "rotates": false, "multitile": false}, {"id": "mutagen_plant", "fg": 1304, "rotates": false, "multitile": false}, {"id": "mutagen_raptor", "fg": 1304, "rotates": false, "multitile": false}, {"id": "mutagen_rat", "fg": 1304, "rotates": false, "multitile": false}, {"id": "mutagen_slime", "fg": 1304, "rotates": false, "multitile": false}, {"id": "mutagen_spider", "fg": 1304, "rotates": false, "multitile": false}, {"id": "mutagen_troglobite", "fg": 1304, "rotates": false, "multitile": false}, {"id": "mutagen_ursine", "fg": 1304, "rotates": false, "multitile": false}, {"id": "muzzle_brake", "fg": 918, "rotates": false, "multitile": false}, {"id": "m_fishspear", "fg": 678, "rotates": false, "multitile": false}, {"id": "nailbat", "fg": 434, "rotates": false, "multitile": false}, {"id": "nailboard", "fg": 433, "rotates": false, "multitile": false}, {"id": "nailgun", "fg": 507, "rotates": false, "multitile": false}, {"id": "nailrifle", "fg": 508, "rotates": false, "multitile": false}, {"id": "nail", "fg": 889, "rotates": false, "multitile": false}, {"id": "napalm", "fg": 937, "rotates": false, "multitile": false}, {"id": "needlegun", "fg": 516, "rotates": false, "multitile": false}, {"id": "needlepistol", "fg": 518, "rotates": false, "multitile": false}, {"id": "needle_bone", "fg": 721, "rotates": false, "multitile": false}, {"id": "needle_wood", "fg": 544, "rotates": false, "multitile": false}, {"id": "nicotine_liquid", "fg": 715, "rotates": false, "multitile": false}, {"id": "nic_gum", "fg": 1256, "rotates": false, "multitile": false}, {"id": "nodachi", "fg": 675, "rotates": false, "multitile": false}, {"id": "nodachi_fake", "fg": 675, "rotates": false, "multitile": false}, {"id": "noise_emitter", "fg": 591, "rotates": false, "multitile": false}, {"id": "noise_emitter_on", "fg": 592, "rotates": false, "multitile": false}, {"id": "nomex", "fg": 477, "rotates": false}, {"id": "nx17", "fg": 556, "rotates": false, "multitile": false}, {"id": "oil_lamp", "fg": 927, "rotates": false, "multitile": false}, {"id": "oil_lamp_on", "fg": 928, "rotates": false, "multitile": false}, {"id": "oj", "fg": 933, "rotates": false, "multitile": false}, {"id": "omnicamera", "fg": 1444, "rotates": false}, {"id": "orangesoda", "fg": 933, "rotates": false, "multitile": false}, {"id": "oxy_powder", "fg": 908, "rotates": false, "multitile": false}, {"id": "oxy_torch", "fg": 666, "rotates": false, "multitile": false}, {"id": "paint_brush", "fg": 445, "rotates": false, "multitile": false}, {"id": "pale_ale", "fg": 932, "rotates": false, "multitile": false}, {"id": "panties", "fg": 1223, "rotates": false, "multitile": false}, {"id": "pan", "fg": 378, "rotates": false, "multitile": false}, {"id": "paper", "fg": 899, "rotates": false, "multitile": false}, {"id": "pastaextruder", "fg": 533, "rotates": false, "multitile": false}, {"id": "pda", "fg": 718, "rotates": false, "multitile": false}, {"id": "pda_flashlight", "fg": 719, "rotates": false, "multitile": false}, {"id": "pearl_collar", "fg": 983, "rotates": false, "multitile": false}, {"id": "pebble", "fg": 902, "rotates": false, "multitile": false}, {"id": "peephole", "fg": 807, "rotates": false, "multitile": false}, {"id": "pepper", "fg": 908, "rotates": false, "multitile": false}, {"id": "permanent_marker", "fg": 714, "rotates": false, "multitile": false}, {"id": "petrified_eye", "fg": 383, "rotates": false, "multitile": false}, {"id": "pheromone", "fg": 646, "rotates": false, "multitile": false}, {"id": "pickaxe", "fg": 712, "rotates": false, "multitile": false}, {"id": "pickelhaube", "fg": 1136, "rotates": false, "multitile": false}, {"id": "picklocks", "fg": 710, "rotates": false, "multitile": false}, {"id": "pike", "fg": 680, "rotates": false, "multitile": false}, {"id": "pillow", "fg": 792, "rotates": false, "multitile": false}, {"id": "pilot_light", "fg": 402, "rotates": false, "multitile": false}, {"id": "pinecone", "fg": 785, "rotates": false}, {"id": "pine_tea", "fg": 1406, "rotates": false, "multitile": false}, {"id": "pine_wine", "fg": 1304, "rotates": false, "multitile": false}, {"id": "pipebomb", "fg": 617, "rotates": false, "multitile": false}, {"id": "pipebomb_act", "fg": 618, "rotates": false, "multitile": false}, {"id": "pipebomb_radio", "fg": 798, "rotates": false, "multitile": false}, {"id": "pipebomb_radio_act", "fg": 799, "rotates": false, "multitile": false}, {"id": "pipe", "fg": 468, "rotates": false}, {"id": "pipe_double_shotgun", "fg": 526, "rotates": false, "multitile": false}, {"id": "pipe_glass", "fg": 746, "rotates": false, "multitile": false}, {"id": "pipe_launcher40mm", "fg": 918, "rotates": false, "multitile": false}, {"id": "pipe_shotgunsawn", "fg": 1800, "rotates": false, "multitile": false}, {"id": "pipe_shotgun", "fg": 1799, "rotates": false, "multitile": false}, {"id": "pipe_tobacco", "fg": 747, "rotates": false, "multitile": false}, {"id": "pistol_bayonet", "fg": 918, "rotates": false, "multitile": false}, {"id": "pistol_flintlock", "fg": 517, "rotates": false, "multitile": false}, {"id": "pistol_grip", "fg": 918, "rotates": false, "multitile": false}, {"id": "pistol_scope", "fg": 918, "rotates": false, "multitile": false}, {"id": "pistol_stock", "fg": 918, "rotates": false, "multitile": false}, {"id": "pitchfork", "fg": 843, "rotates": false, "multitile": false}, {"id": "plant_fibre", "fg": 886, "rotates": false, "multitile": false}, {"id": "plasma", "fg": 893, "rotates": false, "multitile": false}, {"id": "plasma_engine", "fg": 451, "rotates": false, "multitile": false}, {"id": "plasma_rifle", "fg": 556, "rotates": false, "multitile": false}, {"id": "plastic_chunk", "fg": 716, "rotates": false, "multitile": false}, {"id": "plut_cell", "fg": 888, "rotates": false, "multitile": false}, {"id": "pocketwatch", "fg": 473, "rotates": false, "multitile": false}, {"id": "pockknife", "fg": 720, "rotates": false, "multitile": false}, {"id": "pointy_stick", "fg": 424, "rotates": false, "multitile": false}, {"id": "pool_ball", "fg": 387, "rotates": false, "multitile": false}, {"id": "pool_cue", "fg": 424, "rotates": false, "multitile": false}, {"id": "poppysyrup", "fg": 1407, "rotates": false, "multitile": false}, {"id": "poppy_bud", "fg": 469, "rotates": false, "multitile": false}, {"id": "poppy_flower", "fg": 467, "rotates": false, "multitile": false}, {"id": "porkpie", "fg": 1148, "rotates": false, "multitile": false}, {"id": "portable_game", "fg": 657, "rotates": false, "multitile": false}, {"id": "portal", "fg": 647, "rotates": false, "multitile": false}, {"id": "pot", "fg": 420, "rotates": false, "multitile": false}, {"id": "power_supply", "fg": 951, "rotates": false, "multitile": false}, {"id": "ppshdrum", "fg": 862, "rotates": false}, {"id": ["ppshmag", "tokarevmag"], "fg": 863, "rotates": false}, {"id": "ppsh", "fg": 530, "rotates": false, "multitile": false}, {"id": "PR24-extended", "fg": 435, "rotates": false, "multitile": false}, {"id": "PR24-retracted", "fg": 435, "rotates": false, "multitile": false}, {"id": "press", "fg": 704, "rotates": false, "multitile": false}, {"id": "primitive_axe", "fg": 723, "rotates": false, "multitile": false}, {"id": "primitive_hammer", "fg": 722, "rotates": false, "multitile": false}, {"id": "primitive_knife", "fg": 690, "rotates": false, "multitile": false}, {"id": "primitive_shovel", "fg": 724, "rotates": false, "multitile": false}, {"id": "processor", "fg": 950, "rotates": false, "multitile": false}, {"id": "protein_shake", "fg": 1382, "rotates": false, "multitile": false}, {"id": "puck", "fg": 943, "rotates": false, "multitile": false}, {"id": "puller", "fg": 703, "rotates": false, "multitile": false}, {"id": "punch_dagger", "fg": 482, "rotates": false, "multitile": false}, {"id": "purifier", "fg": 937, "rotates": false, "multitile": false}, {"id": "purple_drink", "fg": 1395, "rotates": false}, {"id": "p_carpet", "fg": 763, "rotates": false}, {"id": "p_paint", "fg": 392, "rotates": false, "multitile": false}, {"id": "q_staff", "fg": 429, "rotates": false, "multitile": false}, {"id": "radiocontrol", "fg": 804, "rotates": false, "multitile": false}, {"id": "radio", "fg": 586, "rotates": false, "multitile": false}, {"id": "radio_car", "fg": 802, "rotates": false, "multitile": false}, {"id": "radio_car_box", "fg": 573, "rotates": false, "multitile": false}, {"id": "radio_car_on", "fg": 803, "rotates": false, "multitile": false}, {"id": "radio_on", "fg": 587, "rotates": false, "multitile": false}, {"id": "rad_monitor", "fg": 984, "rotates": false, "multitile": false}, {"id": "raging_bull", "fg": 518, "rotates": false, "multitile": false}, {"id": "ragpouch", "fg": 1159, "rotates": false, "multitile": false}, {"id": "rag", "fg": 477, "rotates": false}, {"id": "rag_bloody", "fg": 417, "rotates": false, "multitile": false}, {"id": "rail_laser_sight", "fg": 918, "rotates": false, "multitile": false}, {"id": "RAM", "fg": 950, "rotates": false, "multitile": false}, {"id": "rapier", "fg": 679, "rotates": false, "multitile": false}, {"id": "rapier_fake", "fg": 679, "rotates": false, "multitile": false}, {"id": "raw_fur", "fg": 810, "rotates": false, "multitile": false}, {"id": "raw_leather", "fg": 811, "rotates": false, "multitile": false}, {"id": "razor_blade", "fg": 539, "rotates": false, "multitile": false}, {"id": "rebar", "fg": 466, "rotates": false, "multitile": false}, {"id": "rebar_rail", "fg": 906, "rotates": false, "multitile": false}, {"id": "rebar_rifle", "fg": 526, "rotates": false, "multitile": false}, {"id": "rebreather", "fg": 1116, "rotates": false, "multitile": false}, {"id": "rebreather_filter", "fg": 893, "rotates": false, "multitile": false}, {"id": "rebreather_on", "fg": 1116, "rotates": false, "multitile": false}, {"id": "rebreather_xl", "fg": 1116, "rotates": false, "multitile": false}, {"id": "rebreather_xl_on", "fg": 1116, "rotates": false, "multitile": false}, {"id": "receiver", "fg": 950, "rotates": false, "multitile": false}, {"id": "rechargeable_battery", "fg": 907, "rotates": false, "multitile": false}, {"id": "recharge_station", "fg": 917, "rotates": false}, {"id": "recoil_stock", "fg": 918, "rotates": false, "multitile": false}, {"id": "recurbow", "fg": 894, "rotates": false, "multitile": false}, {"id": "red_dot_sight", "fg": 918, "rotates": false, "multitile": false}, {"id": "reflexbow", "fg": 894, "rotates": false, "multitile": false}, {"id": "reflexrecurvebow", "fg": 894, "rotates": false, "multitile": false}, {"id": "ref_lighter", "fg": 756, "rotates": false, "multitile": false}, {"id": "ref_lighter_on", "fg": 782, "rotates": false, "multitile": false}, {"id": "reinforced_glass_pane", "fg": 377, "rotates": false, "multitile": false}, {"id": "reinforced_glass_sheet", "fg": 377, "rotates": false, "multitile": false}, {"id": "reinforced_solar_panel", "fg": 877, "rotates": false, "multitile": false}, {"id": "reinforced_solar_panel_v2", "fg": 877, "rotates": false}, {"id": "reloaded_10mm", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_223", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_270", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_3006", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_3006_incendiary", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_300_winmag", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_308", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_32_acp", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_38_fmj", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_38_special", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_38_super", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_40fmj", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_40mm_flechette", "fg": 959, "rotates": false, "multitile": false}, {"id": "reloaded_40mm_shot", "fg": 959, "rotates": false, "multitile": false}, {"id": "reloaded_40sw", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_44fmj", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_44magnum", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_454_Casull", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_45_acp", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_45_jhp", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_45_super", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_46mm", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_500_Magnum", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_50bmg", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_50ss", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_50_incendiary", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_556", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_556_incendiary", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_57mm", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_5x50dart", "fg": 821, "rotates": false, "multitile": false}, {"id": "reloaded_700nx", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_762_51", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_762_51_incendiary", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_762_54R", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_762_m43", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_762_m87", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_9mmfmj", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_9mmP2", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_9mmP", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_9mmP", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_9mm", "fg": 954, "rotates": false, "multitile": false}, {"id": "reloaded_laser_pack", "fg": 907, "rotates": false, "multitile": false}, {"id": "reloaded_shot_00", "fg": 953, "rotates": false, "multitile": false}, {"id": "reloaded_shot_beanbag", "fg": 953, "rotates": false, "multitile": false}, {"id": "reloaded_shot_bird", "fg": 953, "rotates": false, "multitile": false}, {"id": "reloaded_shot_flechette", "fg": 953, "rotates": false, "multitile": false}, {"id": "reloaded_shot_he", "fg": 953, "rotates": false, "multitile": false}, {"id": "reloaded_shot_slug", "fg": 953, "rotates": false, "multitile": false}, {"id": "reloaded_signal_flare", "fg": 953, "rotates": false, "multitile": false}, {"id": "remington_700", "fg": 509, "rotates": false, "multitile": false}, {"id": "remington_870", "fg": 528, "rotates": false, "multitile": false}, {"id": "remotevehcontrol", "fg": 804, "rotates": false, "multitile": false}, {"id": "rep_crossbow", "fg": 895, "rotates": false, "multitile": false}, {"id": "restaurantmap", "fg": 593, "rotates": false, "multitile": false}, {"id": "retool_223", "fg": 918, "rotates": false, "multitile": false}, {"id": "retool_22", "fg": 918, "rotates": false, "multitile": false}, {"id": "retool_308", "fg": 918, "rotates": false, "multitile": false}, {"id": "retool_45", "fg": 918, "rotates": false, "multitile": false}, {"id": "retool_46", "fg": 918, "rotates": false, "multitile": false}, {"id": "retool_57", "fg": 918, "rotates": false, "multitile": false}, {"id": "retool_9mm", "fg": 918, "rotates": false, "multitile": false}, {"id": "revolver_shotgun", "fg": 1798, "rotates": false, "multitile": false}, {"id": "rifle_22", "fg": 509, "rotates": false, "multitile": false}, {"id": "rifle_308", "fg": 509, "rotates": false, "multitile": false}, {"id": "rifle_9mm", "fg": 515, "rotates": false, "multitile": false}, {"id": "rifle_flintlock", "fg": 509, "rotates": false, "multitile": false}, {"id": "rifle_scope", "fg": 918, "rotates": false, "multitile": false}, {"id": "rm103a_pistol", "fg": 518, "rotates": false, "multitile": false}, {"id": "rm11b_sniper_rifle", "fg": 515, "rotates": false, "multitile": false}, {"id": "rm120c", "fg": 528, "rotates": false, "multitile": false}, {"id": "rm121aux", "fg": 918, "rotates": false, "multitile": false}, {"id": "rm2000_smg", "fg": 516, "rotates": false, "multitile": false}, {"id": "rm20", "fg": 554, "rotates": false, "multitile": false}, {"id": "rm228", "fg": 560, "rotates": false, "multitile": false}, {"id": "rm298", "fg": 554, "rotates": false, "multitile": false}, {"id": "rm451_flamethrower", "fg": 558, "rotates": false, "multitile": false}, {"id": "rm51_assault_rifle", "fg": 550, "rotates": false, "multitile": false}, {"id": "rm614_lmg", "fg": 554, "rotates": false, "multitile": false}, {"id": "rm802", "fg": 536, "rotates": false, "multitile": false}, {"id": "rm88_battle_rifle", "fg": 515, "rotates": false, "multitile": false}, {"id": "rm99_pistol", "fg": 518, "rotates": false, "multitile": false}, {"id": "roadmap", "fg": 593, "rotates": false, "multitile": false}, {"id": "robot_controls", "fg": 1445, "rotates": false, "multitile": false}, {"id": "rock", "fg": 457, "rotates": false}, {"id": "rock_pot", "fg": 420, "rotates": false, "multitile": false}, {"id": "rock_quern", "fg": 566, "rotates": false, "multitile": false}, {"id": "rock_sock", "fg": 484, "rotates": false, "multitile": false}, {"id": "rolling_paper", "fg": 488, "rotates": false, "multitile": false}, {"id": "rollmat", "fg": 668, "rotates": false, "multitile": false}, {"id": "rootbeer", "fg": 932, "rotates": false, "multitile": false}, {"id": "rope_30", "fg": 523, "rotates": false}, {"id": "rope_6", "fg": 523, "rotates": true}, {"id": "RPG-7_ammo", "fg": 960, "rotates": false, "multitile": false}, {"id": "RPG", "fg": 562, "rotates": false, "multitile": false}, {"id": "rubber_slug", "fg": 616, "rotates": false, "multitile": false}, {"id": "ruger_1022", "fg": 509, "rotates": false, "multitile": false}, {"id": "ruger_mini", "fg": 509, "rotates": false, "multitile": false}, {"id": "ruger_redhawk", "fg": 518, "rotates": false, "multitile": false}, {"id": "rum", "fg": 932, "rotates": false, "multitile": false}, {"id": "rx12_injector", "fg": 520, "rotates": false, "multitile": false}, {"id": "r_carpet", "fg": 760, "rotates": false}, {"id": "r_paint", "fg": 1396, "rotates": false, "multitile": false}, {"id": "saddle", "fg": 1482, "bg": 1, "rotates": false, "multitile": false}, {"id": "safe_box", "fg": 1565, "rotates": false, "multitile": false}, {"id": "saiga_12", "fg": 529, "rotates": false, "multitile": false}, {"id": "saiga_sawn", "fg": 525, "rotates": false, "multitile": false}, {"id": "saline", "fg": 931, "rotates": false, "multitile": false}, {"id": "salt_water", "fg": 931, "rotates": false, "multitile": false}, {"id": "sarcophagus_access_code", "fg": 899, "rotates": false, "multitile": false}, {"id": "savage_111f", "fg": 509, "rotates": false, "multitile": false}, {"id": "saw", "fg": 693, "rotates": false, "multitile": false}, {"id": "scalpel", "fg": 671, "rotates": false, "multitile": false}, {"id": "scar_h", "fg": 550, "rotates": false, "multitile": false}, {"id": "scar_l", "fg": 550, "rotates": false, "multitile": false}, {"id": "scissors", "fg": 568, "rotates": false, "multitile": false}, {"id": "scrambler", "fg": 627, "rotates": false, "multitile": false}, {"id": "scrambler_act", "fg": 628, "rotates": false, "multitile": false}, {"id": "scrap", "fg": 904, "rotates": false, "multitile": false}, {"id": "screwdriver", "fg": 705, "rotates": false, "multitile": false}, {"id": "scythe", "fg": 492, "rotates": false, "multitile": false}, {"id": "scythe_war", "fg": 493, "rotates": false, "multitile": false}, {"id": "seatbelt", "fg": 883, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 882}]}, {"id": "seat", "fg": 1482, "bg": 1, "rotates": false, "multitile": false}, {"id": "seed_garlic", "fg": 857, "rotates": false}, {"id": "selfbow", "fg": 894, "rotates": false, "multitile": false}, {"id": "sewage", "fg": 932, "rotates": false, "multitile": false}, {"id": "sewing_kit", "fg": 567, "rotates": false, "multitile": false}, {"id": "shaft_metal", "fg": 903, "rotates": false, "multitile": false}, {"id": "shaft_plastic", "fg": 903, "rotates": false, "multitile": false}, {"id": "shaft_wood", "fg": 903, "rotates": false, "multitile": false}, {"id": "shaft_wood_heavy", "fg": 903, "rotates": false, "multitile": false}, {"id": "sharp_rock", "fg": 793, "rotates": false, "multitile": false}, {"id": "sharp_toothbrush", "fg": 485, "rotates": false, "multitile": false}, {"id": "sheet", "fg": 991, "rotates": false}, {"id": "sheet_metal", "fg": 459, "rotates": false, "multitile": false}, {"id": "sheet_metal_lit", "fg": 844, "rotates": false, "multitile": false}, {"id": "shelter_kit", "fg": 246, "rotates": false, "multitile": false}, {"id": "shishkebab_off", "fg": 673, "rotates": false, "multitile": false}, {"id": "shishkebab_on", "fg": 674, "rotates": false, "multitile": false}, {"id": "shocktonfa_off", "fg": 435, "rotates": false, "multitile": false}, {"id": "shocktonfa_on", "fg": 447, "rotates": false, "multitile": false}, {"id": "shock_staff", "fg": 495, "rotates": false, "multitile": false}, {"id": "shortbow", "fg": 894, "rotates": false, "multitile": false}, {"id": "shotgun_d", "fg": 526, "rotates": false, "multitile": false}, {"id": "shotgun_primer", "fg": 909, "rotates": false, "multitile": false}, {"id": "shotgun_sawn", "fg": 524, "rotates": false, "multitile": false}, {"id": "shotgun_s", "fg": 526, "rotates": false, "multitile": false}, {"id": "shotgun_trap", "fg": 608, "rotates": false, "multitile": false}, {"id": "shot_00", "fg": 953, "rotates": false, "multitile": false}, {"id": "shot_beanbag", "fg": 953, "rotates": false, "multitile": false}, {"id": "shot_bird", "fg": 953, "rotates": false, "multitile": false}, {"id": "shot_flechette", "fg": 953, "rotates": false, "multitile": false}, {"id": "shot_he", "fg": 953, "rotates": false, "multitile": false}, {"id": "shot_hull", "fg": 941}, {"id": "shot_scrapbag", "fg": 953, "rotates": false, "multitile": false}, {"id": "shot_scrapslug", "fg": 953, "rotates": false, "multitile": false}, {"id": "shot_scrap", "fg": 953, "rotates": false, "multitile": false}, {"id": "shot_slug", "fg": 953, "rotates": false, "multitile": false}, {"id": "shot_suppressor", "fg": 918, "rotates": false, "multitile": false}, {"id": "shoulder_strap", "fg": 918, "rotates": false, "multitile": false}, {"id": "shovel", "fg": 596, "rotates": false, "multitile": false}, {"id": "sickle", "fg": 494, "rotates": false, "multitile": false}, {"id": "sig_40", "fg": 518, "rotates": false, "multitile": false}, {"id": "sig_mosquito", "fg": 518, "rotates": false, "multitile": false}, {"id": "sig_p230", "fg": 518, "rotates": false, "multitile": false}, {"id": "silver", "fg": 944, "rotates": false, "multitile": false}, {"id": "silver_small", "fg": 904, "rotates": false, "multitile": false}, {"id": "sinew", "fg": 884, "rotates": false, "multitile": false}, {"id": "single_malt_whiskey", "fg": 932, "rotates": false, "multitile": false}, {"id": "skewer", "fg": 424, "rotates": false, "multitile": false}, {"id": "sks", "fg": 509, "rotates": false, "multitile": false}, {"id": "slingshot", "fg": 512, "rotates": false, "multitile": false}, {"id": "sling", "fg": 510, "rotates": false, "multitile": false}, {"id": "small_lcd_screen", "fg": 369, "rotates": false, "multitile": false}, {"id": "small_repairkit", "fg": 939, "rotates": false, "multitile": false}, {"id": "small_storage_battery", "fg": 874, "rotates": false}, {"id": "smart_lamp", "fg": 927, "rotates": false, "multitile": false}, {"id": "smart_lamp_on", "fg": 928, "rotates": false, "multitile": false}, {"id": "smokebomb", "fg": 631, "rotates": false, "multitile": false}, {"id": "smokebomb_act", "fg": 632, "rotates": false, "multitile": false}, {"id": "smpistol_primer", "fg": 909, "rotates": false, "multitile": false}, {"id": "smrifle_primer", "fg": 909, "rotates": false, "multitile": false}, {"id": "sm_extinguisher", "fg": 570, "rotates": false, "multitile": false}, {"id": "snare_trigger", "fg": 707, "rotates": false, "multitile": false}, {"id": "soap", "fg": 911, "rotates": false, "multitile": false}, {"id": "solar_cell", "fg": 458, "rotates": false, "multitile": false}, {"id": "solar_panel", "fg": 876, "rotates": false, "multitile": false}, {"id": "solar_panel_v2", "fg": 876, "rotates": false}, {"id": "solar_panel_v3", "fg": 876, "rotates": false}, {"id": "soldering_iron", "fg": 583, "rotates": false, "multitile": false}, {"id": "solder_wire", "fg": 885, "rotates": false, "multitile": false}, {"id": "soup_human", "fg": 932, "rotates": false, "multitile": false}, {"id": "soup_meat", "fg": 932, "rotates": false, "multitile": false}, {"id": "soup_veggy", "fg": 1410, "rotates": false, "multitile": false}, {"id": "soup_woods", "fg": 932, "rotates": false, "multitile": false}, {"id": "spare_mag", "fg": 918, "rotates": false, "multitile": false}, {"id": "speargun", "fg": 509, "rotates": false, "multitile": false}, {"id": "spear_knife", "fg": 680, "rotates": false, "multitile": false}, {"id": "spear_rebar", "fg": 466, "rotates": false, "multitile": false}, {"id": "spear_steel", "fg": 466, "rotates": false, "multitile": false}, {"id": "spear_survivor", "fg": 845, "rotates": false, "multitile": false}, {"id": "spear_wood", "fg": 440, "rotates": false, "multitile": false}, {"id": "spezi", "fg": 932, "rotates": false, "multitile": false}, {"id": "spiked_plate", "fg": 463, "rotates": false, "multitile": false}, {"id": "spiked_rocket", "fg": 823, "rotates": false, "multitile": false}, {"id": "spike", "fg": 448, "rotates": false, "multitile": false}, {"id": "spiral_stone", "fg": 384, "rotates": false, "multitile": false}, {"id": "splinter", "fg": 660, "rotates": false, "multitile": false}, {"id": "spoon", "fg": 415, "rotates": false, "multitile": false}, {"id": "spork", "fg": 414, "rotates": false, "multitile": false}, {"id": "sports_drink", "fg": 1395, "rotates": false}, {"id": "spray_can", "fg": 713, "rotates": false, "multitile": false}, {"id": "spring", "fg": 553, "rotates": false}, {"id": "stabilizer", "fg": 918, "rotates": false, "multitile": false}, {"id": "steel_chunk", "fg": 692, "rotates": false}, {"id": "steel_lump", "fg": 681, "rotates": false}, {"id": "steel_plate", "fg": 460, "rotates": false, "multitile": false}, {"id": "steel_rail", "fg": 906, "rotates": false, "multitile": false}, {"id": "stereo", "fg": 733, "rotates": false, "multitile": false}, {"id": "stethoscope", "fg": 597, "rotates": false, "multitile": false}, {"id": "steyr_aug", "fg": 552, "rotates": false, "multitile": false}, {"id": "stick", "fg": 538, "rotates": false}, {"id": "still", "fg": 742, "rotates": false, "multitile": false}, {"id": "storage_battery", "fg": 874, "rotates": false, "multitile": false}, {"id": "stout", "fg": 932, "rotates": false, "multitile": false}, {"id": "straw_doll", "fg": 827, "rotates": false, "multitile": false}, {"id": "straw_pile", "fg": 846, "rotates": false, "multitile": false}, {"id": "string_36", "fg": 523, "rotates": false}, {"id": "string_6", "fg": 523, "rotates": false}, {"id": "subsuit_xl", "fg": 994, "rotates": false, "multitile": false}, {"id": "superglue", "fg": 364, "rotates": false, "multitile": false}, {"id": "suppressor", "fg": 918, "rotates": false, "multitile": false}, {"id": "survival_marker", "fg": 448, "rotates": false, "multitile": false}, {"id": "survivormap", "fg": 593, "rotates": false, "multitile": false}, {"id": "survivor_machete", "fg": 672, "rotates": false, "multitile": false}, {"id": "survivor_mess_kit", "fg": 834, "rotates": false, "multitile": false}, {"id": "survivor_special_700", "fg": 509, "rotates": false, "multitile": false}, {"id": "surv_carbine_223", "fg": 509, "rotates": false, "multitile": false}, {"id": "surv_hand_cannon", "fg": 518, "rotates": false, "multitile": false}, {"id": "surv_rocket_launcher", "fg": 836, "rotates": false, "multitile": false}, {"id": "surv_six_shooter", "fg": 518, "rotates": false, "multitile": false}, {"id": "sw629", "fg": 518, "rotates": false, "multitile": false}, {"id": "swage", "fg": 754, "rotates": false, "multitile": false}, {"id": "sweet_water", "fg": 931, "rotates": false, "multitile": false}, {"id": "switchblade", "fg": 690, "rotates": false, "multitile": false}, {"id": "sword_bayonet", "fg": 918, "rotates": false, "multitile": false}, {"id": "sword_crude", "fg": 427, "rotates": false, "multitile": false}, {"id": "sword_forged", "fg": 428, "rotates": false, "multitile": false}, {"id": ["sword_forged", "longsword", "longsword_fake", "longsword_inferior", "arming_sword", "arming_sword_fake", "arming_sword_inferior"], "fg": 859, "rotates": false}, {"id": "sword_nail", "fg": 426, "rotates": false, "multitile": false}, {"id": "sword_wood", "fg": 425, "rotates": false, "multitile": false}, {"id": "sw_22", "fg": 518, "rotates": false, "multitile": false}, {"id": "sw_500", "fg": 518, "rotates": false, "multitile": false}, {"id": "sw_610", "fg": 518, "rotates": false, "multitile": false}, {"id": "sw_619", "fg": 518, "rotates": false, "multitile": false}, {"id": "syringe", "fg": 423, "rotates": false, "multitile": false}, {"id": "syrup", "fg": 932, "rotates": false, "multitile": false}, {"id": "talking_doll", "fg": 738, "rotates": false, "multitile": false}, {"id": "tanbark", "fg": 814, "rotates": false, "multitile": false}, {"id": "tanned_hide", "fg": 363, "rotates": false, "multitile": false}, {"id": "tanned_pelt", "fg": 362, "rotates": false, "multitile": false}, {"id": "tanning_hide", "fg": 817, "rotates": false, "multitile": false}, {"id": "tanning_pelt", "fg": 816, "rotates": false, "multitile": false}, {"id": "tanto", "fg": 675, "rotates": false, "multitile": false}, {"id": "taurus_38", "fg": 518, "rotates": false, "multitile": false}, {"id": "tazer", "fg": 654, "rotates": false, "multitile": false}, {"id": "TDI", "fg": 535, "rotates": false, "multitile": false}, {"id": "teapot", "fg": 945, "rotates": false, "multitile": false}, {"id": "tea", "fg": 932, "rotates": false, "multitile": false}, {"id": "tec9", "fg": 516, "rotates": false, "multitile": false}, {"id": "teddy", "fg": 828, "rotates": false, "multitile": false}, {"id": "telepad", "fg": 940, "rotates": false, "multitile": false}, {"id": "teleporter", "fg": 615, "rotates": false, "multitile": false}, {"id": "teleumbrella", "fg": 474, "rotates": false, "multitile": false}, {"id": "television", "fg": 401, "rotates": false, "multitile": false}, {"id": "tent_kit", "fg": 245, "rotates": false, "multitile": false}, {"id": "tequila", "fg": 932, "rotates": false, "multitile": false}, {"id": "thermometer", "fg": 852, "rotates": false, "multitile": false}, {"id": "thread", "fg": 885, "rotates": false, "multitile": false}, {"id": "throw_extinguisher", "fg": 572, "rotates": false, "multitile": false}, {"id": "tihar", "fg": 536, "rotates": false, "multitile": false}, {"id": "tin", "fg": 904, "rotates": false, "multitile": false}, {"id": "tin_plate", "fg": 413, "rotates": false, "multitile": false}, {"id": "toaster", "fg": 403, "rotates": false, "multitile": false}, {"id": "tokarev", "fg": 518, "rotates": false, "multitile": false}, {"id": "tonfa", "fg": 435, "rotates": false, "multitile": false}, {"id": "tonfa_wood", "fg": 437, "rotates": false, "multitile": false}, {"id": "tongs", "fg": 752, "rotates": false, "multitile": false}, {"id": "toolbox", "fg": 758, "rotates": false, "multitile": false}, {"id": "tool_anfo_charge", "fg": 853, "rotates": false, "multitile": false}, {"id": "tool_anfo_charge_act", "fg": 854, "rotates": false, "multitile": false}, {"id": "tool_black_powder_charge", "fg": 805, "rotates": false, "multitile": false}, {"id": "tool_black_powder_charge_act", "fg": 806, "rotates": false, "multitile": false}, {"id": "tool_rdx_charge", "fg": 853, "rotates": false, "multitile": false}, {"id": "tool_rdx_charge_act", "fg": 854, "rotates": false, "multitile": false}, {"id": "tool_rdx_sand_bomb", "fg": 617, "rotates": false, "multitile": false}, {"id": "tool_rdx_sand_bomb_act", "fg": 618, "rotates": false, "multitile": false}, {"id": "torch", "fg": 696, "rotates": false, "multitile": false}, {"id": "torch_done", "fg": 395, "rotates": false, "multitile": false}, {"id": "torch_lit", "fg": 697, "rotates": false, "multitile": false}, {"id": "touristmap", "fg": 593, "rotates": false, "multitile": false}, {"id": "towel", "fg": 1006, "rotates": true}, {"id": "transponder", "fg": 950, "rotates": false, "multitile": false}, {"id": "trex_gun", "fg": 527, "rotates": false, "multitile": false}, {"id": "trimmer_off", "fg": 542, "rotates": false, "multitile": false}, {"id": "trimmer_on", "fg": 542, "rotates": false, "multitile": false}, {"id": "triple_sec", "fg": 933, "rotates": false, "multitile": false}, {"id": "tripwire", "fg": 606, "rotates": false, "multitile": false}, {"id": "tuned_mechanism", "fg": 918, "rotates": false, "multitile": false}, {"id": "two_way_radio", "fg": 585, "rotates": false, "multitile": false}, {"id": "ugl_buttstock", "fg": 918, "rotates": false, "multitile": false}, {"id": "umbrella", "fg": 474, "rotates": false, "multitile": false}, {"id": "unbio_blaster_gun", "fg": 557, "rotates": false, "multitile": false}, {"id": "UPS_off", "fg": 650, "rotates": false, "multitile": false}, {"id": "UPS_on", "fg": 651, "rotates": false, "multitile": false}, {"id": "usb_drive", "fg": 386, "rotates": false, "multitile": false}, {"id": "usp_45", "fg": 518, "rotates": false, "multitile": false}, {"id": "usp_9mm", "fg": 518, "rotates": false, "multitile": false}, {"id": "uzi", "fg": 516, "rotates": false, "multitile": false}, {"id": "u_shotgun", "fg": 918, "rotates": false, "multitile": false}, {"id": "v12_combustion", "fg": 873, "rotates": false, "multitile": false}, {"id": "v29", "fg": 555, "rotates": false, "multitile": false}, {"id": "v29_cheap", "fg": 555, "rotates": false, "multitile": false}, {"id": "v2_combustion", "fg": 873, "rotates": false, "multitile": false}, {"id": "v6_combustion", "fg": 873, "rotates": false, "multitile": false}, {"id": "v6_diesel", "fg": 873, "rotates": false, "multitile": false}, {"id": "V8", "fg": 1409, "rotates": false, "multitile": false}, {"id": "v8_combustion", "fg": 873, "rotates": false, "multitile": false}, {"id": "v8_diesel", "fg": 873, "rotates": false, "multitile": false}, {"id": "vacutainer", "fg": 665, "rotates": false, "multitile": false}, {"id": "vac_sealer", "fg": 733, "rotates": false, "multitile": false}, {"id": "veggy_pickled", "fg": 1286, "rotates": false, "multitile": false}, {"id": "vehicle_controls", "fg": 881, "rotates": false, "multitile": false}, {"id": "veh_tracker", "fg": 926, "rotates": false}, {"id": "vinegar", "fg": 934, "rotates": false, "multitile": false}, {"id": "vine_30", "fg": 598, "rotates": false, "multitile": false}, {"id": "vodka", "fg": 931, "rotates": false, "multitile": false}, {"id": "vortex_stone", "fg": 658, "rotates": false, "multitile": false}, {"id": "v_table", "fg": 914, "rotates": false}, {"id": "waffleiron", "fg": 378, "rotates": false, "multitile": false}, {"id": "wakizashi", "fg": 675, "rotates": false, "multitile": false}, {"id": "wakizashi_fake", "fg": 675, "rotates": false, "multitile": false}, {"id": "walther_ppk", "fg": 518, "rotates": false, "multitile": false}, {"id": "warhammer", "fg": 471, "rotates": false, "multitile": false}, {"id": "wasp_sting", "fg": 443, "rotates": false, "multitile": false}, {"id": "watercannon", "fg": 536, "rotates": false, "multitile": false}, {"id": "waterproof_gunmod", "fg": 918, "rotates": false, "multitile": false}, {"id": "waterskin2", "fg": 353, "rotates": false, "multitile": false}, {"id": "waterskin3", "fg": 353, "rotates": false, "multitile": false}, {"id": "waterskin", "fg": 353, "rotates": false, "multitile": false}, {"id": "water", "fg": 931, "rotates": false, "multitile": false}, {"id": "water_acid", "fg": 931, "rotates": false, "multitile": false}, {"id": "water_acid_weak", "fg": 931, "rotates": false, "multitile": false}, {"id": "water_clean", "fg": 931, "rotates": false, "multitile": false}, {"id": "water_faucet", "fg": 784, "rotates": false}, {"id": "water_mineral", "fg": 931, "rotates": false, "multitile": false}, {"id": "water_purifier", "fg": 584, "rotates": false, "multitile": false}, {"id": "wax", "fg": 1336, "rotates": false, "multitile": false}, {"id": "wearable_light", "fg": 574, "rotates": false, "multitile": false}, {"id": "wearable_light_on", "fg": 575, "rotates": false, "multitile": false}, {"id": "wearable_rx12", "fg": 520, "rotates": false, "multitile": false}, {"id": "weeks_old_newspaper", "fg": 899, "rotates": false, "multitile": false}, {"id": "welder", "fg": 666, "rotates": false, "multitile": false}, {"id": "welder_crude", "fg": 741, "rotates": false, "multitile": false}, {"id": "weldrig", "fg": 878, "rotates": false, "multitile": false}, {"id": "well_pump", "fg": 781, "rotates": false, "multitile": false}, {"id": "wheel", "fg": 1465, "rotates": false, "multitile": false}, {"id": "wheel_armor", "fg": 1514, "rotates": false, "multitile": false}, {"id": "wheel_bicycle", "fg": 1467, "rotates": false, "multitile": false}, {"id": "wheel_caster", "fg": 1467, "rotates": false, "multitile": false}, {"id": "wheel_metal", "fg": 1465, "rotates": false, "multitile": false}, {"id": "wheel_motorbike", "fg": 1464, "rotates": false, "multitile": false}, {"id": "wheel_small", "fg": 1467, "rotates": false, "multitile": false}, {"id": "wheel_wheelchair", "fg": 783, "rotates": false, "multitile": false}, {"id": "wheel_wide", "fg": 1466, "rotates": false, "multitile": false}, {"id": "wheel_wood", "fg": 1430, "rotates": false, "multitile": false}, {"id": "wheel_wood_b", "fg": 1431, "rotates": false, "multitile": false}, {"id": "whiskey", "fg": 932, "rotates": false, "multitile": false}, {"id": "win70", "fg": 509, "rotates": false, "multitile": false}, {"id": "wine_cabernet", "fg": 1409, "rotates": false, "multitile": false}, {"id": "wine_chardonnay", "fg": 934, "rotates": false, "multitile": false}, {"id": "wine_noir", "fg": 1409, "rotates": false, "multitile": false}, {"id": "wine_riesling", "fg": 934, "rotates": false, "multitile": false}, {"id": "wire", "fg": 430, "rotates": false, "multitile": false}, {"id": "wire_barbed", "fg": 430, "rotates": false, "multitile": false}, {"id": "withered", "fg": 361, "rotates": false, "multitile": false}, {"id": "wooden_barrel", "fg": 949, "rotates": false}, {"id": "wood_plate", "fg": 465, "rotates": false, "multitile": false}, {"id": "wood_smoother", "fg": 437, "rotates": false, "multitile": false}, {"id": "wrapper", "fg": 488, "rotates": true}, {"id": "wrench", "fg": 706, "rotates": false, "multitile": false}, {"id": "wristrocket", "fg": 597, "rotates": false, "multitile": false}, {"id": "w_paint", "fg": 391, "rotates": false, "multitile": false}, {"id": "xacto", "fg": 669, "rotates": false, "multitile": false}, {"id": "xlframe", "fg": 923, "rotates": false}, {"id": "yarn", "fg": 885, "rotates": false, "multitile": false}, {"id": "y_carpet", "fg": 762, "rotates": false}, {"id": "y_paint", "fg": 416, "rotates": false, "multitile": false}, {"id": "zweifire_off", "fg": 684, "rotates": false, "multitile": false}, {"id": "zweifire_on", "fg": 685, "rotates": false, "multitile": false}, {"id": "zweihander", "fg": 682, "rotates": false, "multitile": false}, {"id": "zweihander_fake", "fg": 682, "rotates": false, "multitile": false}, {"id": "20x66_beanbag", "fg": 956, "rotates": false, "multitile": false}, {"id": "20x66_bootleg_flechette", "fg": 956, "rotates": false, "multitile": false}, {"id": "20x66_bootleg_shot", "fg": 956, "rotates": false, "multitile": false}, {"id": "20x66_bootleg_slug", "fg": 956, "rotates": false, "multitile": false}, {"id": "20x66_exp", "fg": 956, "rotates": false, "multitile": false}, {"id": "20x66_flare", "fg": 956, "rotates": false, "multitile": false}, {"id": "20x66_flechette", "fg": 956, "rotates": false, "multitile": false}, {"id": "20x66_frag", "fg": 956, "rotates": false, "multitile": false}, {"id": "20x66_inc", "fg": 956, "rotates": false, "multitile": false}, {"id": "20x66_shot", "fg": 956, "rotates": false, "multitile": false}, {"id": "20x66_slug", "fg": 956, "rotates": false, "multitile": false}, {"id": "36navy", "fg": 521, "rotates": false, "multitile": false}, {"id": "44army", "fg": 521, "rotates": false, "multitile": false}, {"id": "50bmg", "fg": 954, "rotates": false, "multitile": false}, {"id": "50ss", "fg": 954, "rotates": false, "multitile": false}, {"id": "50_casing", "fg": 958, "rotates": false, "multitile": false}, {"id": "50_incendiary", "fg": 954, "rotates": false, "multitile": false}, {"id": "arrowhead", "fg": 957, "rotates": false, "multitile": false}, {"id": "arrowhead_plastic", "fg": 957, "rotates": false, "multitile": false}, {"id": "arrow_cf", "fg": 903, "rotates": false, "multitile": false}, {"id": "arrow_exploding", "fg": 903, "rotates": false, "multitile": false}, {"id": "arrow_field_point", "fg": 903, "rotates": false, "multitile": false}, {"id": "arrow_field_point_fletched", "fg": 903, "rotates": false, "multitile": false}, {"id": "arrow_fire_hardened", "fg": 903, "rotates": false, "multitile": false}, {"id": "arrow_fire_hardened_fletched", "fg": 903, "rotates": false, "multitile": false}, {"id": "arrow_flamming", "fg": 903, "rotates": false, "multitile": false}, {"id": "arrow_heavy_field_point", "fg": 903, "rotates": false, "multitile": false}, {"id": "arrow_heavy_field_point_fletched", "fg": 903, "rotates": false, "multitile": false}, {"id": "arrow_heavy_fire_hardened", "fg": 903, "rotates": false, "multitile": false}, {"id": "arrow_heavy_fire_hardened_fletched", "fg": 903, "rotates": false, "multitile": false}, {"id": "arrow_metal", "fg": 903, "rotates": false, "multitile": false}, {"id": "arrow_metal_sharpened", "fg": 903, "rotates": false, "multitile": false}, {"id": "arrow_metal_sharpened_fletched", "fg": 903, "rotates": false, "multitile": false}, {"id": "arrow_plastic", "fg": 903, "rotates": false, "multitile": false}, {"id": "arrow_small_game", "fg": 903, "rotates": false, "multitile": false}, {"id": "arrow_small_game_fletched", "fg": 903, "rotates": false, "multitile": false}, {"id": "arrow_wood", "fg": 903, "rotates": false, "multitile": false}, {"id": "arrow_wood_heavy", "fg": 903, "rotates": false, "multitile": false}, {"id": "bolt_explosive", "fg": 903, "rotates": false, "multitile": false}, {"id": "bolt_metal", "fg": 903, "rotates": false, "multitile": false}, {"id": "bolt_steel", "fg": 903, "rotates": false, "multitile": false}, {"id": "bolt_wood", "fg": 903, "rotates": false, "multitile": false}, {"id": "signal_flare", "fg": 953, "rotates": false, "multitile": false}, {"id": "101_carpentry", "fg": 964, "rotates": false, "multitile": false}, {"id": "advanced_electronics", "fg": 962, "rotates": false, "multitile": false}, {"id": "advanced_electrronics", "fg": 968, "rotates": false, "multitile": false}, {"id": "adv_chemistry", "fg": 964, "rotates": false, "multitile": false}, {"id": "atomic_survival", "fg": 961, "rotates": false, "multitile": false}, {"id": "book_archery", "fg": 963, "rotates": false, "multitile": false}, {"id": "book_icef", "fg": 968, "rotates": false, "multitile": false}, {"id": "brewing_cookbook", "fg": 967, "rotates": false, "multitile": false}, {"id": "carpentry_book", "fg": 964, "rotates": false, "multitile": false}, {"id": "child_book", "fg": 1213, "rotates": false, "multitile": false}, {"id": "computer_science", "fg": 968, "rotates": false, "multitile": false}, {"id": "cookbook", "fg": 963, "rotates": false, "multitile": false}, {"id": "cookbook_human", "fg": 963, "rotates": false, "multitile": false}, {"id": "cookbook_italian", "fg": 963, "rotates": false, "multitile": false}, {"id": "cookbook_sushi", "fg": 971, "rotates": false}, {"id": "decoy_anarch", "fg": 966, "rotates": false}, {"id": "decoy_elfa", "fg": 966, "rotates": false}, {"id": "emergency_book", "fg": 962, "rotates": false, "multitile": false}, {"id": "essay_book", "fg": 964, "rotates": false, "multitile": false}, {"id": "fairy_tales", "fg": 969, "rotates": false, "multitile": false}, {"id": "family_cookbook", "fg": 961, "rotates": false, "multitile": false}, {"id": "fun_survival", "fg": 963, "rotates": false, "multitile": false}, {"id": "fun_traps", "fg": 963, "rotates": false, "multitile": false}, {"id": "glassblowing_book", "fg": 970, "rotates": false, "multitile": false}, {"id": "guidebook", "fg": 966, "rotates": false, "multitile": false}, {"id": "holybook_bible1", "fg": 971, "rotates": false}, {"id": "holybook_bible2", "fg": 966, "rotates": false}, {"id": "holybook_bible3", "fg": 966, "rotates": false}, {"id": "holybook_granth", "fg": 971, "rotates": false}, {"id": "holybook_hadith", "fg": 966, "rotates": false}, {"id": "holybook_kallisti", "fg": 969, "rotates": false}, {"id": "holybook_kojiki", "fg": 966, "rotates": false}, {"id": "holybook_mormon", "fg": 968, "rotates": false}, {"id": "holybook_pastafarian", "fg": 969, "rotates": false}, {"id": "holybook_quran", "fg": 966, "rotates": false}, {"id": "holybook_scientology", "fg": 971, "rotates": false}, {"id": "holybook_slack", "fg": 969, "rotates": false}, {"id": "holybook_sutras", "fg": 964, "rotates": false}, {"id": "holybook_talmud", "fg": 969, "rotates": false}, {"id": "holybook_tanakh", "fg": 966, "rotates": false}, {"id": "holybook_tripitaka", "fg": 969, "rotates": false}, {"id": "holybook_upanishads", "fg": 962, "rotates": false}, {"id": "holybook_vedas", "fg": 964, "rotates": false}, {"id": "howto_computers", "fg": 963, "rotates": false, "multitile": false}, {"id": "howto_computer", "fg": 961, "rotates": false, "multitile": false}, {"id": "howto_traps", "fg": 963, "rotates": false, "multitile": false}, {"id": "mag_archery", "fg": 1213, "rotates": false, "multitile": false}, {"id": "mag_barter", "fg": 962, "rotates": false, "multitile": false}, {"id": "mag_bashing", "fg": 1213, "rotates": false, "multitile": false}, {"id": "mag_beauty", "fg": 1213, "rotates": false, "multitile": false}, {"id": "mag_carpentry", "fg": 1213, "rotates": false, "multitile": false}, {"id": "mag_cars", "fg": 1213, "rotates": false, "multitile": false}, {"id": "mag_comic", "fg": 1213, "rotates": false, "multitile": false}, {"id": "mag_computer", "fg": 963, "rotates": false, "multitile": false}, {"id": "mag_cooking", "fg": 1213, "rotates": false, "multitile": false}, {"id": "mag_cutting", "fg": 965, "rotates": false, "multitile": false}, {"id": "mag_dodge", "fg": 1213, "rotates": false, "multitile": false}, {"id": "mag_dude", "fg": 968, "rotates": false, "multitile": false}, {"id": "mag_electronics", "fg": 1213, "rotates": false, "multitile": false}, {"id": "mag_fabrication", "fg": 1213, "rotates": false, "multitile": false}, {"id": "mag_fieldrepair", "fg": 961, "rotates": false, "multitile": false}, {"id": "mag_firstaid", "fg": 1213, "rotates": false, "multitile": false}, {"id": "mag_gaming", "fg": 1213, "rotates": false, "multitile": false}, {"id": "mag_glam", "fg": 1213, "rotates": false, "multitile": false}, {"id": "mag_guns", "fg": 1213, "rotates": false, "multitile": false}, {"id": "mag_launcher", "fg": 964, "rotates": false, "multitile": false}, {"id": "mag_mechanics", "fg": 964, "rotates": false, "multitile": false}, {"id": "mag_melee", "fg": 965, "rotates": false, "multitile": false}, {"id": "mag_news", "fg": 1213, "rotates": false, "multitile": false}, {"id": "mag_pistol", "fg": 966, "rotates": false, "multitile": false}, {"id": "mag_porn", "fg": 1213, "rotates": false, "multitile": false}, {"id": "mag_rifle", "fg": 963, "rotates": false, "multitile": false}, {"id": "mag_shotgun", "fg": 963, "rotates": false, "multitile": false}, {"id": "mag_smg", "fg": 966, "rotates": false, "multitile": false}, {"id": "mag_stabbing", "fg": 965, "rotates": false, "multitile": false}, {"id": "mag_survival", "fg": 963, "rotates": false, "multitile": false}, {"id": "mag_swimming", "fg": 1213, "rotates": false, "multitile": false}, {"id": "mag_tailor", "fg": 1213, "rotates": false, "multitile": false}, {"id": "mag_throwing", "fg": 1213, "rotates": false, "multitile": false}, {"id": "mag_traps", "fg": 1213, "rotates": false, "multitile": false}, {"id": "mag_tv", "fg": 1213, "rotates": false, "multitile": false}, {"id": "mag_unarmed", "fg": 964, "rotates": false, "multitile": false}, {"id": "manual_aikido", "fg": 969, "rotates": false}, {"id": "manual_archery", "fg": 961, "rotates": false, "multitile": false}, {"id": "manual_bashing", "fg": 963, "rotates": false, "multitile": false}, {"id": "manual_boxing", "fg": 963, "rotates": false, "multitile": false}, {"id": "manual_brawl", "fg": 963, "rotates": false, "multitile": false}, {"id": "manual_business", "fg": 963, "rotates": false, "multitile": false}, {"id": "manual_capoeira", "fg": 969, "rotates": false}, {"id": "manual_carpentry", "fg": 963, "rotates": false, "multitile": false}, {"id": "manual_centipede", "fg": 969, "rotates": false}, {"id": "manual_computers", "fg": 963, "rotates": false, "multitile": false}, {"id": "manual_crane", "fg": 969, "rotates": false}, {"id": "manual_cutting", "fg": 963, "rotates": false, "multitile": false}, {"id": "manual_dodge", "fg": 962, "rotates": false, "multitile": false}, {"id": "manual_dragon", "fg": 969, "rotates": false}, {"id": "manual_driving", "fg": 963, "rotates": false, "multitile": false}, {"id": "manual_electronics", "fg": 963, "rotates": false, "multitile": false}, {"id": "manual_eskrima", "fg": 963, "rotates": false, "multitile": false}, {"id": "manual_fabrication", "fg": 964, "rotates": false, "multitile": false}, {"id": "manual_fencing", "fg": 963, "rotates": false, "multitile": false}, {"id": "manual_first_aid", "fg": 963, "rotates": false, "multitile": false}, {"id": "manual_guns", "fg": 963, "rotates": false, "multitile": false}, {"id": "manual_gun", "fg": 963, "rotates": false, "multitile": false}, {"id": "manual_judo", "fg": 969, "rotates": false}, {"id": "manual_karate", "fg": 969, "rotates": false}, {"id": "manual_knives", "fg": 963, "rotates": false, "multitile": false}, {"id": "manual_krav_maga", "fg": 969, "rotates": false}, {"id": "manual_launcher", "fg": 961, "rotates": false, "multitile": false}, {"id": "manual_leopard", "fg": 969, "rotates": false}, {"id": "manual_lizard", "fg": 969, "rotates": false}, {"id": "manual_mechanics", "fg": 963, "rotates": false, "multitile": false}, {"id": "manual_melee", "fg": 965, "rotates": false, "multitile": false}, {"id": "manual_muay_thai", "fg": 969, "rotates": false}, {"id": "manual_ninjutsu", "fg": 969, "rotates": false}, {"id": "manual_niten", "fg": 963, "rotates": false, "multitile": false}, {"id": "manual_pistol", "fg": 962, "rotates": false, "multitile": false}, {"id": "manual_rifle", "fg": 963, "rotates": false, "multitile": false}, {"id": "manual_scorpion", "fg": 969, "rotates": false}, {"id": "manual_shotgun", "fg": 963, "rotates": false, "multitile": false}, {"id": "manual_silat", "fg": 963, "rotates": false, "multitile": false}, {"id": "manual_smg", "fg": 967, "rotates": false, "multitile": false}, {"id": "manual_snake", "fg": 969, "rotates": false}, {"id": "manual_speech", "fg": 963, "rotates": false, "multitile": false}, {"id": "manual_stabbing", "fg": 963, "rotates": false, "multitile": false}, {"id": "manual_survival", "fg": 963, "rotates": false, "multitile": false}, {"id": "manual_swimming", "fg": 963, "rotates": false, "multitile": false}, {"id": "manual_taekwondo", "fg": 969, "rotates": false}, {"id": "manual_tailor", "fg": 963, "rotates": false, "multitile": false}, {"id": "manual_tai_chi", "fg": 969, "rotates": false}, {"id": "manual_throw", "fg": 963, "rotates": false, "multitile": false}, {"id": "manual_tiger", "fg": 969, "rotates": false}, {"id": "manual_toad", "fg": 969, "rotates": false}, {"id": "manual_traps", "fg": 963, "rotates": false, "multitile": false}, {"id": "manual_venom_snake", "fg": 969, "rotates": false}, {"id": "manual_zui_quan", "fg": 969, "rotates": false}, {"id": "many_years_old_newspaper", "fg": 899, "rotates": false, "multitile": false}, {"id": "modern_tanner", "fg": 961, "rotates": false, "multitile": false}, {"id": "months_old_newspaper", "fg": 899, "rotates": false, "multitile": false}, {"id": "newest_newspaper", "fg": 899, "rotates": false, "multitile": false}, {"id": "news_regional", "fg": 965, "rotates": false, "multitile": false}, {"id": "note", "fg": 899, "rotates": false, "multitile": false}, {"id": "novel_adventure", "fg": 961, "rotates": false, "multitile": false}, {"id": "novel_buddy", "fg": 964, "rotates": false, "multitile": false}, {"id": "novel_coa", "fg": 963, "rotates": false, "multitile": false}, {"id": "novel_crime", "fg": 962, "rotates": false, "multitile": false}, {"id": "novel_drama", "fg": 967, "rotates": false, "multitile": false}, {"id": "novel_erotic", "fg": 1213, "rotates": false, "multitile": false}, {"id": "novel_experimental", "fg": 962, "rotates": false, "multitile": false}, {"id": "novel_fantasy", "fg": 967, "rotates": false, "multitile": false}, {"id": "novel_horror", "fg": 967, "rotates": false, "multitile": false}, {"id": "novel_mystery", "fg": 967, "rotates": false, "multitile": false}, {"id": "novel_pulp", "fg": 966, "rotates": false, "multitile": false}, {"id": "novel_road", "fg": 1213, "rotates": false, "multitile": false}, {"id": "novel_romance", "fg": 967, "rotates": false, "multitile": false}, {"id": "novel_samurai", "fg": 963, "rotates": false, "multitile": false}, {"id": "novel_satire", "fg": 966, "rotates": false, "multitile": false}, {"id": "novel_scifi", "fg": 967, "rotates": false, "multitile": false}, {"id": "novel_sports", "fg": 969, "rotates": false, "multitile": false}, {"id": "novel_spy", "fg": 967, "rotates": false, "multitile": false}, {"id": "novel_swash", "fg": 967, "rotates": false, "multitile": false}, {"id": "novel_thriller", "fg": 969, "rotates": false, "multitile": false}, {"id": "novel_tragedy", "fg": 967, "rotates": false, "multitile": false}, {"id": "novel_war", "fg": 961, "rotates": false, "multitile": false}, {"id": "novel_western", "fg": 961, "rotates": false, "multitile": false}, {"id": "one_year_old_newspaper", "fg": 899, "rotates": false, "multitile": false}, {"id": "philosophy_book", "fg": 962, "rotates": false, "multitile": false}, {"id": "phonebook", "fg": 964, "rotates": false}, {"id": "photo_album", "fg": 961, "rotates": false, "multitile": false}, {"id": "plays_book", "fg": 1213, "rotates": false, "multitile": false}, {"id": "pocket_firearms", "fg": 961, "rotates": false, "multitile": false}, {"id": "pocket_firstaid", "fg": 961, "rotates": false, "multitile": false}, {"id": "pocket_survival", "fg": 963, "rotates": false, "multitile": false}, {"id": "poetry_book", "fg": 1213, "rotates": false, "multitile": false}, {"id": "priest_diary", "fg": 968, "rotates": false, "multitile": false}, {"id": "radio_book", "fg": 964, "rotates": false, "multitile": false}, {"id": "recipe_alpha", "fg": 971, "rotates": false, "multitile": false}, {"id": "recipe_animal", "fg": 971, "rotates": false}, {"id": "recipe_arrows", "fg": 961, "rotates": false, "multitile": false}, {"id": "recipe_atomic_battery", "fg": 899, "rotates": false, "multitile": false}, {"id": "recipe_augs", "fg": 966, "rotates": false}, {"id": "recipe_bows", "fg": 961, "rotates": false, "multitile": false}, {"id": "recipe_bullets", "fg": 961, "rotates": false, "multitile": false}, {"id": "recipe_caseless", "fg": 966, "rotates": false, "multitile": false}, {"id": "recipe_chimera", "fg": 971, "rotates": false, "multitile": false}, {"id": "recipe_creepy", "fg": 971, "rotates": false}, {"id": "recipe_elfa", "fg": 966, "rotates": false}, {"id": "recipe_labchem", "fg": 971, "rotates": false}, {"id": "recipe_lab_cvd", "fg": 970, "rotates": false, "multitile": false}, {"id": "recipe_lab_elec", "fg": 964, "rotates": false}, {"id": "recipe_maiar", "fg": 971, "rotates": false}, {"id": "recipe_medicalmut", "fg": 962, "rotates": false, "multitile": false}, {"id": "recipe_melee", "fg": 970, "rotates": false, "multitile": false}, {"id": "recipe_mil_augs", "fg": 966, "rotates": false}, {"id": "recipe_mininuke_launch", "fg": 964, "rotates": false, "multitile": false}, {"id": "recipe_raptor", "fg": 971, "rotates": false}, {"id": "recipe_serum", "fg": 971, "rotates": false}, {"id": "record_accounting", "fg": 968, "rotates": false, "multitile": false}, {"id": "record_patient", "fg": 968, "rotates": false, "multitile": false}, {"id": "SICP", "fg": 968, "rotates": false, "multitile": false}, {"id": "story_book", "fg": 962, "rotates": false, "multitile": false}, {"id": "survival_book", "fg": 963, "rotates": false, "multitile": false}, {"id": "survnote", "fg": 899, "rotates": false, "multitile": false}, {"id": "tailor_portfolio", "fg": 961, "rotates": false, "multitile": false}, {"id": "tall_tales", "fg": 963, "rotates": false, "multitile": false}, {"id": "textbook_anarch", "fg": 966, "rotates": false}, {"id": "textbook_armeast", "fg": 967, "rotates": false, "multitile": false}, {"id": "textbook_armwest", "fg": 968, "rotates": false, "multitile": false}, {"id": "textbook_business", "fg": 968, "rotates": false, "multitile": false}, {"id": "textbook_carpentry", "fg": 968, "rotates": false, "multitile": false}, {"id": "textbook_chemistry", "fg": 968, "rotates": false, "multitile": false}, {"id": "textbook_computers", "fg": 968, "rotates": false, "multitile": false}, {"id": "textbook_computer", "fg": 962, "rotates": false, "multitile": false}, {"id": "textbook_electronics", "fg": 962, "rotates": false, "multitile": false}, {"id": "textbook_fabrication", "fg": 963, "rotates": false, "multitile": false}, {"id": "textbook_fireman", "fg": 964, "rotates": false, "multitile": false}, {"id": "textbook_firstaid", "fg": 962, "rotates": false, "multitile": false}, {"id": "textbook_gaswarfare", "fg": 964, "rotates": false, "multitile": false}, {"id": "textbook_mechanics", "fg": 968, "rotates": false, "multitile": false}, {"id": "textbook_robots", "fg": 968, "rotates": false, "multitile": false}, {"id": "textbook_speech", "fg": 964, "rotates": false, "multitile": false}, {"id": "textbook_survival", "fg": 963, "rotates": false, "multitile": false}, {"id": "textbook_tailor", "fg": 963, "rotates": false, "multitile": false}, {"id": "textbook_traps", "fg": 963, "rotates": false, "multitile": false}, {"id": "textbook_weapeast", "fg": 970, "rotates": false, "multitile": false}, {"id": "textbook_weapwest", "fg": 964, "rotates": false, "multitile": false}, {"id": "trappers_companion", "fg": 961, "rotates": false, "multitile": false}, {"id": "visions_solitude", "fg": 968, "rotates": false, "multitile": false}, {"id": "welding_book", "fg": 962, "rotates": false, "multitile": false}, {"id": "years_old_newspaper", "fg": 899, "rotates": false, "multitile": false}, {"id": "ZSG", "fg": 967, "rotates": false, "multitile": false}, {"id": "10gal_hat", "fg": 1229, "rotates": false, "multitile": false}, {"id": "2byarm_guard", "fg": 1186, "rotates": false, "multitile": false}, {"id": "2byshin_guard", "fg": 1186, "rotates": false, "multitile": false}, {"id": "aep_suit", "fg": 1218, "rotates": false, "multitile": false}, {"id": "american_flag", "fg": 1167, "rotates": false, "multitile": false}, {"id": "anbc_suit", "fg": 1218, "rotates": false, "multitile": false}, {"id": "apron_leather", "fg": 1208, "rotates": false, "multitile": false}, {"id": "armguard_chitin", "fg": 1097, "rotates": false, "multitile": false}, {"id": "armguard_hard", "fg": 1095, "rotates": false, "multitile": false}, {"id": "armguard_metal", "fg": 1094, "rotates": false, "multitile": false}, {"id": "armguard_paper", "fg": 1095, "rotates": false, "multitile": false}, {"id": "armguard_soft", "fg": 1094, "rotates": false, "multitile": false}, {"id": "armor_blarmor", "fg": 1217, "rotates": false, "multitile": false}, {"id": "armor_bone", "fg": 1216, "rotates": false, "multitile": false}, {"id": "armor_chitin", "fg": 1050, "rotates": false, "multitile": false}, {"id": "armor_farmor", "fg": 1038, "rotates": false, "multitile": false}, {"id": "armor_larmor", "fg": 1217, "rotates": false, "multitile": false}, {"id": "armor_lightplate", "fg": 1204, "rotates": false, "multitile": false}, {"id": "armor_nomad", "fg": 1084, "rotates": false, "multitile": false}, {"id": "armor_plarmor", "fg": 1195, "rotates": false, "multitile": false}, {"id": "armor_plate", "fg": 1054, "rotates": false, "multitile": false}, {"id": "armor_samurai", "fg": 1206, "rotates": false, "multitile": false}, {"id": "armor_scrapsuit", "fg": 1195, "rotates": false, "multitile": false}, {"id": "army_top", "fg": 1060, "rotates": false, "multitile": false}, {"id": "arm_splint", "fg": 1186, "rotates": false, "multitile": false}, {"id": "arm_warmers", "fg": 1222, "rotates": false, "multitile": false}, {"id": "backpack", "fg": 1149, "rotates": false, "multitile": false}, {"id": "backpack_leather", "fg": 1150, "rotates": false, "multitile": false}, {"id": "back_holster", "fg": 1156, "rotates": false, "multitile": false}, {"id": "badge_cybercop", "fg": 1166, "rotates": false, "multitile": false}, {"id": "badge_deputy", "fg": 1166, "rotates": false, "multitile": false}, {"id": "badge_detective", "fg": 1166, "rotates": false, "multitile": false}, {"id": "badge_marshal", "fg": 1166, "rotates": false, "multitile": false}, {"id": "badge_swat", "fg": 1166, "rotates": false, "multitile": false}, {"id": "balclava", "fg": 1134, "rotates": false, "multitile": false}, {"id": "bandana", "fg": 1144, "rotates": false, "multitile": false}, {"id": "barrette", "fg": 979, "rotates": false, "multitile": false}, {"id": "bastsandals", "fg": 1018, "rotates": false, "multitile": false}, {"id": "beekeeping_gloves", "fg": 1227, "rotates": false, "multitile": false}, {"id": "beekeeping_hood", "fg": 1193, "rotates": false, "multitile": false}, {"id": "beekeeping_suit", "fg": 1093, "rotates": false, "multitile": false}, {"id": "beret", "fg": 1137, "rotates": false, "multitile": false}, {"id": "beret_wool", "fg": 1137, "rotates": false, "multitile": false}, {"id": "bikini_top", "fg": 1062, "rotates": false, "multitile": false}, {"id": "bikini_top_fur", "fg": 1064, "rotates": false, "multitile": false}, {"id": "bikini_top_leather", "fg": 1063, "rotates": false, "multitile": false}, {"id": "bindle", "fg": 989, "rotates": false, "multitile": false}, {"id": "blanket", "fg": 1168, "rotates": false, "multitile": false}, {"id": "blazer", "fg": 1076, "rotates": false, "multitile": false}, {"id": "bondage_mask", "fg": 1042, "rotates": false, "multitile": false}, {"id": "bondage_suit", "fg": 1041, "rotates": false, "multitile": false}, {"id": "bookplate", "fg": 1196, "rotates": false, "multitile": false}, {"id": "boots", "fg": 1012, "rotates": false, "multitile": false}, {"id": "boots_bone", "fg": 1215, "rotates": false, "multitile": false}, {"id": "boots_bunker", "fg": 1214, "rotates": false, "multitile": false}, {"id": "boots_chitin", "fg": 1022, "rotates": false, "multitile": false}, {"id": "boots_combat", "fg": 1015, "rotates": false, "multitile": false}, {"id": "boots_fsurvivor", "fg": 1199, "rotates": false, "multitile": false}, {"id": "boots_fur", "fg": 1013, "rotates": false, "multitile": false}, {"id": "boots_h20survivor", "fg": 1009, "rotates": false, "multitile": false}, {"id": "boots_hiking", "fg": 1016, "rotates": false, "multitile": false}, {"id": "boots_hsurvivor", "fg": 1199, "rotates": false, "multitile": false}, {"id": "boots_larmor", "fg": 1012, "rotates": false, "multitile": false}, {"id": "boots_lsurvivor", "fg": 1015, "rotates": false, "multitile": false}, {"id": "boots_plate", "fg": 1199, "rotates": false, "multitile": false}, {"id": "boots_rubber", "fg": 1214, "rotates": false, "multitile": false}, {"id": "boots_steel", "fg": 1014, "rotates": false, "multitile": false}, {"id": "boots_survivor", "fg": 1014, "rotates": false, "multitile": false}, {"id": "boots_western", "fg": 1245, "rotates": false, "multitile": false}, {"id": "boots_winter", "fg": 1017, "rotates": false, "multitile": false}, {"id": "boots_wsurvivor", "fg": 1017, "rotates": false, "multitile": false}, {"id": "boots_xlsurvivor", "fg": 1014, "rotates": false, "multitile": false}, {"id": "bowhat", "fg": 1148, "rotates": false, "multitile": false}, {"id": "boxer_shorts", "fg": 1023, "rotates": false, "multitile": false}, {"id": "boxing_gloves", "fg": 1101, "rotates": false, "multitile": false}, {"id": "boy_shorts", "fg": 1023, "rotates": false, "multitile": false}, {"id": "bra", "fg": 1062, "rotates": false, "multitile": false}, {"id": "briefcase", "fg": 939, "rotates": false, "multitile": false}, {"id": "briefs", "fg": 1223, "rotates": false, "multitile": false}, {"id": "brooch", "fg": 374, "rotates": false, "multitile": false}, {"id": "bunker_coat", "fg": 1079, "rotates": false, "multitile": false}, {"id": "bunker_pants", "fg": 1187, "rotates": false, "multitile": false}, {"id": "b_shorts", "fg": 1243, "rotates": false, "multitile": false}, {"id": "camera", "fg": 795, "rotates": false, "multitile": false}, {"id": "camera_pro", "fg": 796, "rotates": false, "multitile": false}, {"id": "camisole", "fg": 1061, "rotates": false, "multitile": false}, {"id": "ceramic_shard", "fg": 793, "rotates": false, "multitile": false}, {"id": "chainmail_arms", "fg": 1094, "rotates": false, "multitile": false}, {"id": "chainmail_hood", "fg": 1144, "rotates": false, "multitile": false}, {"id": "chainmail_legs", "fg": 1094, "rotates": false, "multitile": false}, {"id": "chainmail_suit", "fg": 1054, "rotates": false, "multitile": false}, {"id": "chainmail_vest", "fg": 1089, "rotates": false, "multitile": false}, {"id": "chaps_leather", "fg": 1029, "rotates": false, "multitile": false}, {"id": "chestrig", "fg": 1092, "rotates": false, "multitile": false}, {"id": "cleansuit", "fg": 1053, "rotates": false, "multitile": false}, {"id": "cleats", "fg": 1009, "rotates": false, "multitile": false}, {"id": "cloak", "fg": 1175, "rotates": false, "multitile": false}, {"id": "cloak_fur", "fg": 1176, "rotates": false, "multitile": false}, {"id": "cloak_leather", "fg": 1177, "rotates": false, "multitile": false}, {"id": "clogs", "fg": 1018, "rotates": false, "multitile": false}, {"id": "clownshoes", "fg": 1040, "rotates": false, "multitile": false}, {"id": "coat_fur", "fg": 1087, "rotates": false, "multitile": false}, {"id": "coat_fur_sf", "fg": 1087, "rotates": false, "multitile": false}, {"id": "coat_lab", "fg": 1093, "rotates": false, "multitile": false}, {"id": "coat_rain", "fg": 1079, "rotates": false, "multitile": false}, {"id": "coat_winter", "fg": 1086, "rotates": false, "multitile": false}, {"id": "collarpin", "fg": 394, "rotates": false, "multitile": false}, {"id": "copper_bracelet", "fg": 985, "rotates": false, "multitile": false}, {"id": "copper_ear", "fg": 982, "rotates": false, "multitile": false}, {"id": "corset", "fg": 1043, "rotates": false, "multitile": false}, {"id": "cowboy_hat", "fg": 1228, "rotates": false, "multitile": false}, {"id": "cowl_wool", "fg": 1144, "rotates": false, "multitile": false}, {"id": "cured_hide", "fg": 813, "rotates": false, "multitile": false}, {"id": "cured_pelt", "fg": 812, "rotates": false, "multitile": false}, {"id": "dance_shoes", "fg": 1020, "rotates": false, "multitile": false}, {"id": "depowered_armor", "fg": 1179, "rotates": false, "multitile": false}, {"id": "depowered_helmet", "fg": 1180, "rotates": false, "multitile": false}, {"id": "diamond_dental_grill", "fg": 396, "rotates": false, "multitile": false}, {"id": "diamond_ring", "fg": 1161, "rotates": false, "multitile": false}, {"id": "dinosuit", "fg": 1249, "rotates": false, "multitile": false}, {"id": "dive_bag", "fg": 1155, "rotates": false, "multitile": false}, {"id": "diving_watch", "fg": 1191, "rotates": false, "multitile": false}, {"id": "down_blanket", "fg": 1168, "rotates": false, "multitile": false}, {"id": "down_pillow", "fg": 792, "rotates": false, "multitile": false}, {"id": "dragonskin", "fg": 1238, "rotates": false, "multitile": false}, {"id": "dress", "fg": 1048, "rotates": false, "multitile": false}, {"id": "dress_shirt", "fg": 1058, "rotates": false, "multitile": false}, {"id": "dress_shoes", "fg": 1020, "rotates": false, "multitile": false}, {"id": "dress_wedding", "fg": 1049, "rotates": false, "multitile": false}, {"id": "duffelbag", "fg": 1152, "rotates": false, "multitile": false}, {"id": "duster", "fg": 1082, "rotates": false, "multitile": false}, {"id": "duster_fur", "fg": 1085, "rotates": false, "multitile": false}, {"id": "duster_leather", "fg": 1084, "rotates": false, "multitile": false}, {"id": "duster_survivor", "fg": 1084, "rotates": false, "multitile": false}, {"id": "ear_plugs", "fg": 1239, "rotates": false, "multitile": false}, {"id": "elbow_pads", "fg": 1096, "rotates": false, "multitile": false}, {"id": "emer_blanket", "fg": 1170, "rotates": false, "multitile": false}, {"id": "emer_blanket_on", "fg": 1170, "rotates": false, "multitile": false}, {"id": "entry_suit", "fg": 1213, "rotates": false, "multitile": false}, {"id": "exploding_arrow_warhead", "fg": 957, "rotates": false, "multitile": false}, {"id": "e_handcuffs", "fg": 797, "rotates": false, "multitile": false}, {"id": "fancy_sunglasses", "fg": 1212, "rotates": false, "multitile": false}, {"id": "fanny", "fg": 1155, "rotates": false, "multitile": false}, {"id": "fc_hairpin", "fg": 978, "rotates": false, "multitile": false}, {"id": "fedora", "fg": 1228, "rotates": false, "multitile": false}, {"id": "fencing_jacket", "fg": 1093, "rotates": false, "multitile": false}, {"id": "fencing_mask", "fg": 1144, "rotates": false, "multitile": false}, {"id": "fencing_pants", "fg": 988, "rotates": false, "multitile": false}, {"id": "firehelmet", "fg": 1135, "rotates": false, "multitile": false}, {"id": "fireman_belt", "fg": 1236, "rotates": false, "multitile": false}, {"id": "fire_gauntlets", "fg": 1110, "rotates": false, "multitile": false}, {"id": "fishing_waders", "fg": 1080, "rotates": false, "multitile": false}, {"id": "flag_shirt", "fg": 1056, "rotates": false, "multitile": false}, {"id": "flip_flops", "fg": 1019, "rotates": false, "multitile": false}, {"id": "flotation_vest", "fg": 1083, "rotates": false, "multitile": false}, {"id": "folding_poncho", "fg": 972, "rotates": false, "multitile": false}, {"id": "folding_poncho_on", "fg": 1079, "rotates": false, "multitile": false}, {"id": "football_armor", "fg": 1010, "rotates": false, "multitile": false}, {"id": "footrags", "fg": 1019, "rotates": false, "multitile": false}, {"id": "footrags_fur", "fg": 1018, "rotates": false, "multitile": false}, {"id": "footrags_leather", "fg": 1018, "rotates": false, "multitile": false}, {"id": "fsurvivor_suit", "fg": 1201, "rotates": false, "multitile": false}, {"id": "fur", "fg": 814, "rotates": false, "multitile": false}, {"id": "fur_blanket", "fg": 1169, "rotates": false, "multitile": false}, {"id": "fur_cat_ears", "fg": 1064, "rotates": false, "multitile": false}, {"id": "fur_collar", "fg": 1234, "rotates": false, "multitile": false}, {"id": "fur_rollmat", "fg": 1172, "rotates": false, "multitile": false}, {"id": "gauntlets_bone", "fg": 1227, "rotates": false, "multitile": false}, {"id": "gauntlets_chitin", "fg": 1100, "rotates": false, "multitile": false}, {"id": "gauntlets_larmor", "fg": 1105, "rotates": false, "multitile": false}, {"id": "geta", "fg": 1008, "rotates": false, "multitile": false}, {"id": "glasses_bal", "fg": 1125, "rotates": false, "multitile": false}, {"id": "glasses_bifocal", "fg": 1119, "rotates": false, "multitile": false}, {"id": "glasses_eye", "fg": 1117, "rotates": false, "multitile": false}, {"id": "glasses_monocle", "fg": 1126, "rotates": false, "multitile": false}, {"id": "glasses_reading", "fg": 1118, "rotates": false, "multitile": false}, {"id": "glasses_safety", "fg": 1120, "rotates": false, "multitile": false}, {"id": "gloves_bag", "fg": 1100, "rotates": false, "multitile": false}, {"id": "gloves_fingerless", "fg": 1107, "rotates": false, "multitile": false}, {"id": "gloves_fingerless_mod", "fg": 1107, "rotates": false, "multitile": false}, {"id": "gloves_fsurvivor", "fg": 1046, "rotates": false, "multitile": false}, {"id": "gloves_fur", "fg": 1102, "rotates": false, "multitile": false}, {"id": "gloves_h20survivor", "fg": 1046, "rotates": false, "multitile": false}, {"id": "gloves_hsurvivor", "fg": 1046, "rotates": false, "multitile": false}, {"id": "gloves_leather", "fg": 1105, "rotates": false, "multitile": false}, {"id": "gloves_light", "fg": 1100, "rotates": false, "multitile": false}, {"id": "gloves_liner", "fg": 1099, "rotates": false, "multitile": false}, {"id": "gloves_lsurvivor", "fg": 1098, "rotates": false, "multitile": false}, {"id": "gloves_medical", "fg": 1109, "rotates": false, "multitile": false}, {"id": "gloves_plate", "fg": 1046, "rotates": false, "multitile": false}, {"id": "gloves_rubber", "fg": 1108, "rotates": false, "multitile": false}, {"id": "gloves_survivor", "fg": 1110, "rotates": false, "multitile": false}, {"id": "gloves_tactical", "fg": 1106, "rotates": false, "multitile": false}, {"id": "gloves_winter", "fg": 1104, "rotates": false, "multitile": false}, {"id": "gloves_wool", "fg": 1103, "rotates": false, "multitile": false}, {"id": "gloves_wraps", "fg": 1099, "rotates": false, "multitile": false}, {"id": "gloves_wraps_fur", "fg": 1107, "rotates": false, "multitile": false}, {"id": "gloves_wraps_leather", "fg": 1107, "rotates": false, "multitile": false}, {"id": "gloves_wsurvivor", "fg": 1104, "rotates": false, "multitile": false}, {"id": "gloves_xlsurvivor", "fg": 1110, "rotates": false, "multitile": false}, {"id": "glove_jackson", "fg": 787, "rotates": false, "multitile": false}, {"id": "gobag", "fg": 1151, "rotates": false, "multitile": false}, {"id": "goggles_ir", "fg": 1002, "rotates": false, "multitile": false}, {"id": "goggles_ir_on", "fg": 1002, "rotates": false, "multitile": false}, {"id": "goggles_nv", "fg": 1124, "rotates": false, "multitile": false}, {"id": "goggles_nv_on", "fg": 1124, "rotates": false, "multitile": false}, {"id": "goggles_ski", "fg": 1122, "rotates": false, "multitile": false}, {"id": "goggles_swim", "fg": 1121, "rotates": false, "multitile": false}, {"id": "goggles_welding", "fg": 1123, "rotates": false, "multitile": false}, {"id": "gold_bracelet", "fg": 974, "rotates": false, "multitile": false}, {"id": "gold_dental_grill", "fg": 396, "rotates": false, "multitile": false}, {"id": "gold_ear", "fg": 980, "rotates": false, "multitile": false}, {"id": "gold_watch", "fg": 986, "rotates": false, "multitile": false}, {"id": "greatcoat", "fg": 1005, "rotates": false}, {"id": "h20survivor_suit", "fg": 1201, "rotates": false, "multitile": false}, {"id": "hairpin", "fg": 977, "rotates": false, "multitile": false}, {"id": "hakama_gi", "fg": 1027, "rotates": false, "multitile": false}, {"id": "halter_top", "fg": 1047, "rotates": false, "multitile": false}, {"id": "hand_crossbow", "fg": 895, "rotates": false, "multitile": false}, {"id": "hat_ball", "fg": 1128, "rotates": false, "multitile": false}, {"id": "hat_boonie", "fg": 1129, "rotates": false, "multitile": false}, {"id": "hat_chef", "fg": 1192, "rotates": false, "multitile": false}, {"id": "hat_cotton", "fg": 1130, "rotates": false, "multitile": false}, {"id": "hat_fur", "fg": 1133, "rotates": false, "multitile": false}, {"id": "hat_hard", "fg": 1135, "rotates": false, "multitile": false}, {"id": "hat_hunting", "fg": 1132, "rotates": false, "multitile": false}, {"id": "hat_knit", "fg": 1131, "rotates": false, "multitile": false}, {"id": "hat_newsboy", "fg": 1130, "rotates": false, "multitile": false}, {"id": "hat_noise_cancelling", "fg": 1240, "rotates": false, "multitile": false}, {"id": "hazmat_suit", "fg": 1053, "rotates": false, "multitile": false}, {"id": "headgear", "fg": 1011, "rotates": false, "multitile": false}, {"id": "heels", "fg": 1021, "rotates": false, "multitile": false}, {"id": "helmet_army", "fg": 1141, "rotates": false, "multitile": false}, {"id": "helmet_ball", "fg": 1140, "rotates": false, "multitile": false}, {"id": "helmet_barbute", "fg": 1205, "rotates": false, "multitile": false}, {"id": "helmet_bike", "fg": 1138, "rotates": false, "multitile": false}, {"id": "helmet_bone", "fg": 1219, "rotates": false, "multitile": false}, {"id": "helmet_football", "fg": 1011, "rotates": false, "multitile": false}, {"id": "helmet_hsurvivor", "fg": 1203, "rotates": false, "multitile": false}, {"id": "helmet_kabuto", "fg": 1207, "rotates": false, "multitile": false}, {"id": "helmet_larmor", "fg": 1233, "rotates": false, "multitile": false}, {"id": "helmet_survivor", "fg": 1232, "rotates": false, "multitile": false}, {"id": "helmet_xlsurvivor", "fg": 1232, "rotates": false, "multitile": false}, {"id": "hoodie", "fg": 1070, "rotates": false, "multitile": false}, {"id": "hood_rain", "fg": 1226, "rotates": false, "multitile": false}, {"id": "hood_wsurvivor", "fg": 987, "rotates": false, "multitile": false}, {"id": "hot_pants", "fg": 1065, "rotates": false, "multitile": false}, {"id": "hot_pants_fur", "fg": 1067, "rotates": false, "multitile": false}, {"id": "hot_pants_leather", "fg": 1066, "rotates": false, "multitile": false}, {"id": "jacket_army", "fg": 1032, "rotates": false, "multitile": false}, {"id": "jacket_evac", "fg": 1074, "rotates": false, "multitile": false}, {"id": "jacket_flannel", "fg": 1075, "rotates": false, "multitile": false}, {"id": "jacket_jean", "fg": 1074, "rotates": false, "multitile": false}, {"id": ["jacket_leather", "jacket_windbreaker"], "fg": 1077, "rotates": false, "multitile": false}, {"id": "jacket_leather_red", "fg": 1086, "rotates": false, "multitile": false}, {"id": "jacket_light", "fg": 1073, "rotates": false, "multitile": false}, {"id": "jeans", "fg": 1026, "rotates": false, "multitile": false}, {"id": "jeans_red", "fg": 1033, "rotates": false, "multitile": false}, {"id": "jedi_cloak", "fg": 1178, "rotates": false, "multitile": false}, {"id": "jersey", "fg": 1071, "rotates": false, "multitile": false}, {"id": "judo_gi", "fg": 1039, "rotates": false, "multitile": false}, {"id": "jumper_cable", "fg": 809, "rotates": false, "multitile": false}, {"id": "jumper_cable_heavy", "fg": 809, "rotates": false, "multitile": false}, {"id": "jumpsuit", "fg": 1037, "rotates": false, "multitile": false}, {"id": "jumpsuit_xl", "fg": 1037, "rotates": false, "multitile": false}, {"id": "karate_gi", "fg": 1039, "rotates": false, "multitile": false}, {"id": "keffiyeh", "fg": 1111, "rotates": false, "multitile": false}, {"id": "keikogi", "fg": 1093, "rotates": false, "multitile": false}, {"id": "kevlar", "fg": 1078, "rotates": false, "multitile": false}, {"id": "kilt", "fg": 1036, "rotates": false, "multitile": false}, {"id": "knee_high_boots", "fg": 1245, "rotates": false, "multitile": false}, {"id": "knee_pads", "fg": 1189, "rotates": false, "multitile": false}, {"id": "knit_scarf", "fg": 1113, "rotates": false, "multitile": false}, {"id": "knit_scarf_loose", "fg": 1113, "rotates": false, "multitile": false}, {"id": "kufi", "fg": 1004, "rotates": false, "multitile": false}, {"id": "leathersandals", "fg": 1018, "rotates": false, "multitile": false}, {"id": "leather", "fg": 815, "rotates": false, "multitile": false}, {"id": "leather_belt", "fg": 1236, "rotates": false, "multitile": false}, {"id": "leather_cat_ears", "fg": 1063, "rotates": false, "multitile": false}, {"id": "leather_collar", "fg": 1234, "rotates": false, "multitile": false}, {"id": "leather_pouch", "fg": 1160, "rotates": false, "multitile": false}, {"id": "leggings", "fg": 1244, "rotates": false, "multitile": false}, {"id": "legguard_hard", "fg": 1095, "rotates": false, "multitile": false}, {"id": "legguard_metal", "fg": 1094, "rotates": false, "multitile": false}, {"id": "legguard_paper", "fg": 1095, "rotates": false, "multitile": false}, {"id": "legrig", "fg": 1211, "rotates": false, "multitile": false}, {"id": "leg_splint", "fg": 1186, "rotates": false, "multitile": false}, {"id": "leg_warmers", "fg": 1222, "rotates": false, "multitile": false}, {"id": "leg_warmers_xlf", "fg": 1222, "rotates": false, "multitile": false}, {"id": "leg_warmers_xl", "fg": 1222, "rotates": false, "multitile": false}, {"id": "linuxtshirt", "fg": 1164, "rotates": false, "multitile": false}, {"id": "locket", "fg": 1162, "rotates": false, "multitile": false}, {"id": "loincloth", "fg": 1223, "rotates": false, "multitile": false}, {"id": "loincloth_fur", "fg": 1224, "rotates": false, "multitile": false}, {"id": "loincloth_leather", "fg": 1225, "rotates": false, "multitile": false}, {"id": "longshirt", "fg": 1059, "rotates": false, "multitile": false}, {"id": "long_knit_scarf", "fg": 1113, "rotates": false, "multitile": false}, {"id": "long_knit_scarf_loose", "fg": 1113, "rotates": false, "multitile": false}, {"id": "long_patchwork_scarf", "fg": 1113, "rotates": false, "multitile": false}, {"id": "long_patchwork_scarf_loose", "fg": 1113, "rotates": false, "multitile": false}, {"id": "long_underpants", "fg": 1035, "rotates": false, "multitile": false}, {"id": "long_undertop", "fg": 1220, "rotates": false, "multitile": false}, {"id": "lowtops", "fg": 1019, "rotates": false, "multitile": false}, {"id": "lsurvivor_suit", "fg": 1197, "rotates": false, "multitile": false}, {"id": "maid_dress", "fg": 1248, "rotates": false, "multitile": false}, {"id": "maid_hat", "fg": 1138, "rotates": false, "multitile": false}, {"id": "makeshift_sling", "fg": 990, "rotates": false, "multitile": false}, {"id": "mask_bal", "fg": 1209, "rotates": false, "multitile": false}, {"id": "mask_bunker", "fg": 1116, "rotates": false, "multitile": false}, {"id": "mask_bunker_on", "fg": 1116, "rotates": false, "multitile": false}, {"id": "mask_dust", "fg": 1112, "rotates": false, "multitile": false}, {"id": "mask_filter", "fg": 1115, "rotates": false, "multitile": false}, {"id": "mask_fsurvivorxl", "fg": 1116, "rotates": false, "multitile": false}, {"id": "mask_fsurvivor", "fg": 1116, "rotates": false, "multitile": false}, {"id": "mask_gas", "fg": 1116, "rotates": false, "multitile": false}, {"id": "mask_gas_xl", "fg": 1116, "rotates": false, "multitile": false}, {"id": "mask_guy_fawkes", "fg": 1210, "rotates": false, "multitile": false}, {"id": "mask_h20survivorxl", "fg": 1116, "rotates": false, "multitile": false}, {"id": "mask_h20survivorxl_on", "fg": 1116, "rotates": false, "multitile": false}, {"id": "mask_h20survivor", "fg": 1116, "rotates": false, "multitile": false}, {"id": "mask_h20survivor_on", "fg": 1116, "rotates": false, "multitile": false}, {"id": "mask_hockey", "fg": 1210, "rotates": false, "multitile": false}, {"id": "mask_rioter", "fg": 1144, "rotates": false, "multitile": false}, {"id": "mask_ski", "fg": 1134, "rotates": false, "multitile": false}, {"id": "mask_ski_loose", "fg": 1134, "rotates": false, "multitile": false}, {"id": "mask_survivorxl", "fg": 1116, "rotates": false, "multitile": false}, {"id": "mask_survivor", "fg": 1116, "rotates": false, "multitile": false}, {"id": "mask_wsurvivorxl", "fg": 1116, "rotates": false, "multitile": false}, {"id": "mask_wsurvivor", "fg": 1116, "rotates": false, "multitile": false}, {"id": "mbag", "fg": 1154, "rotates": false, "multitile": false}, {"id": "miner_hat", "fg": 975, "rotates": false, "multitile": false}, {"id": "miner_hat_on", "fg": 976, "rotates": false, "multitile": false}, {"id": "mittens", "fg": 1101, "rotates": false, "multitile": false}, {"id": "mocassins", "fg": 1018, "rotates": false, "multitile": false}, {"id": "modularvestceramic", "fg": 1237, "rotates": false, "multitile": false}, {"id": "modularvesthard", "fg": 1237, "rotates": false, "multitile": false}, {"id": "modularvestkevlar", "fg": 1237, "rotates": false, "multitile": false}, {"id": "modularveststeel", "fg": 1237, "rotates": false, "multitile": false}, {"id": "modularvestsuper", "fg": 1237, "rotates": false, "multitile": false}, {"id": "modularvest", "fg": 1237, "rotates": false, "multitile": false}, {"id": "molle_pack", "fg": 1151, "rotates": false, "multitile": false}, {"id": "motorbike_armor", "fg": 1213, "rotates": false, "multitile": false}, {"id": "motorbike_boots", "fg": 1199, "rotates": false, "multitile": false}, {"id": "motorbike_pants", "fg": 1027, "rotates": false, "multitile": false}, {"id": "mouthpiece", "fg": 1246, "rotates": false, "multitile": false}, {"id": "nanoskirt", "fg": 992, "rotates": false, "multitile": false}, {"id": "necklace", "fg": 1162, "rotates": false, "multitile": false}, {"id": "nomex_gloves", "fg": 1046, "rotates": false, "multitile": false}, {"id": "nomex_hood", "fg": 1144, "rotates": false, "multitile": false}, {"id": "nomex_socks", "fg": 1009, "rotates": false, "multitile": false}, {"id": "nomex_suit", "fg": 1044, "rotates": false, "multitile": false}, {"id": "obi_gi", "fg": 522, "rotates": false, "multitile": false}, {"id": "optical_cloak", "fg": 1178, "rotates": false, "multitile": false}, {"id": "pants", "fg": 1027, "rotates": false, "multitile": false}, {"id": "pants_army", "fg": 1031, "rotates": false, "multitile": false}, {"id": "pants_cargo", "fg": 1030, "rotates": false, "multitile": false}, {"id": "pants_checkered", "fg": 1194, "rotates": false, "multitile": false}, {"id": "pants_fur", "fg": 1034, "rotates": false, "multitile": false}, {"id": "pants_leather", "fg": 1028, "rotates": false, "multitile": false}, {"id": "pants_ski", "fg": 1033, "rotates": false, "multitile": false}, {"id": "pants_survivor", "fg": 1030, "rotates": false, "multitile": false}, {"id": "patchwork_scarf", "fg": 1113, "rotates": false, "multitile": false}, {"id": "patchwork_scarf_loose", "fg": 1113, "rotates": false, "multitile": false}, {"id": "peacoat", "fg": 1088, "rotates": false, "multitile": false}, {"id": "plastic_shopping_bag", "fg": 786, "rotates": false, "multitile": false}, {"id": "polo_shirt", "fg": 1057, "rotates": false, "multitile": false}, {"id": "poncho", "fg": 1081, "rotates": false, "multitile": false}, {"id": "postman_hat", "fg": 1131, "rotates": false, "multitile": false}, {"id": "postman_shirt", "fg": 1241, "rotates": false, "multitile": false}, {"id": "postman_shorts", "fg": 1242, "rotates": false, "multitile": false}, {"id": "pot_helmet", "fg": 1139, "rotates": false, "multitile": false}, {"id": "power_armor_basic", "fg": 1179, "rotates": false, "multitile": false}, {"id": "power_armor_frame", "fg": 1185, "rotates": false, "multitile": false}, {"id": "power_armor_heavy", "fg": 1183, "rotates": false, "multitile": false}, {"id": "power_armor_helmet_basic", "fg": 1180, "rotates": false, "multitile": false}, {"id": "power_armor_helmet_heavy", "fg": 1184, "rotates": false, "multitile": false}, {"id": "power_armor_helmet_light", "fg": 1182, "rotates": false, "multitile": false}, {"id": "power_armor_light", "fg": 1181, "rotates": false, "multitile": false}, {"id": ["purse", "slingpack"], "fg": 1153, "rotates": false, "multitile": false}, {"id": "quiver", "fg": 1157, "rotates": false, "multitile": false}, {"id": "quiver_large", "fg": 1158, "rotates": false, "multitile": false}, {"id": "rad_badge", "fg": 1165, "rotates": false, "multitile": false}, {"id": "ring", "fg": 1161, "rotates": false, "multitile": false}, {"id": "rm13_armor", "fg": 1204, "rotates": false, "multitile": false}, {"id": "rm13_armor_on", "fg": 1204, "rotates": false, "multitile": false}, {"id": "rollerskates", "fg": 1045, "rotates": false, "multitile": false}, {"id": "roller_blades", "fg": 1045, "rotates": false, "multitile": false}, {"id": "rucksack", "fg": 1151, "rotates": false, "multitile": false}, {"id": "runner_bag", "fg": 1149, "rotates": false, "multitile": false}, {"id": "scabbard", "fg": 1158, "rotates": false, "multitile": false}, {"id": "scarf", "fg": 1113, "rotates": false, "multitile": false}, {"id": "scarf_fur", "fg": 1114, "rotates": false, "multitile": false}, {"id": "scarf_fur_long", "fg": 1114, "rotates": false, "multitile": false}, {"id": "scarf_fur_long_loose", "fg": 1114, "rotates": false, "multitile": false}, {"id": "scarf_fur_loose", "fg": 1114, "rotates": false, "multitile": false}, {"id": "scarf_long", "fg": 1113, "rotates": false, "multitile": false}, {"id": "scarf_long_loose", "fg": 1113, "rotates": false, "multitile": false}, {"id": "scarf_loose", "fg": 1113, "rotates": false, "multitile": false}, {"id": "sf_watch", "fg": 986, "rotates": false, "multitile": false}, {"id": "shark_suit", "fg": 1213, "rotates": false, "multitile": false}, {"id": "sheath", "fg": 1157, "rotates": false, "multitile": false}, {"id": "sheriffshirt", "fg": 1059, "rotates": false, "multitile": false}, {"id": "shoes_bowling", "fg": 729, "rotates": false, "multitile": false}, {"id": "sholster", "fg": 919, "rotates": false, "multitile": false}, {"id": "shorts", "fg": 1024, "rotates": false, "multitile": false}, {"id": "shorts_cargo", "fg": 1025, "rotates": false, "multitile": false}, {"id": "shorts_denim", "fg": 1243, "rotates": false, "multitile": false}, {"id": "silver_bracelet", "fg": 984, "rotates": false, "multitile": false}, {"id": "silver_ear", "fg": 981, "rotates": false, "multitile": false}, {"id": "skinny_tie", "fg": 373, "rotates": false, "multitile": false}, {"id": "skirt", "fg": 1036, "rotates": false, "multitile": false}, {"id": "skirt_leather", "fg": 1247, "rotates": false, "multitile": false}, {"id": "sleeping_bag", "fg": 1171, "rotates": false, "multitile": false}, {"id": "sleeping_bag_fur", "fg": 1169, "rotates": false, "multitile": false}, {"id": "sleeveless_duster", "fg": 1089, "rotates": false, "multitile": false}, {"id": "sleeveless_duster_fur", "fg": 1090, "rotates": false, "multitile": false}, {"id": "sleeveless_duster_leather", "fg": 1090, "rotates": false, "multitile": false}, {"id": "sleeveless_duster_survivor", "fg": 1090, "rotates": false, "multitile": false}, {"id": "sleeveless_trenchcoat", "fg": 1089, "rotates": false, "multitile": false}, {"id": "sleeveless_trenchcoat_fur", "fg": 1090, "rotates": false, "multitile": false}, {"id": "sleeveless_trenchcoat_leather", "fg": 1090, "rotates": false, "multitile": false}, {"id": "sleeveless_trenchcoat_survivor", "fg": 1090, "rotates": false, "multitile": false}, {"id": "sleeveless_tunic", "fg": 1048, "rotates": false, "multitile": false}, {"id": "small_relic", "fg": 1163, "rotates": false, "multitile": false}, {"id": "sneakers", "fg": 1020, "rotates": false, "multitile": false}, {"id": "snuggie", "fg": 1174, "rotates": false, "multitile": false}, {"id": "socks", "fg": 1007, "rotates": false, "multitile": false}, {"id": "socks_bag", "fg": 1019, "rotates": false, "multitile": false}, {"id": "socks_bowling", "fg": 1007, "rotates": false, "multitile": false}, {"id": "socks_wool", "fg": 1008, "rotates": false, "multitile": false}, {"id": "sports_bra", "fg": 1062, "rotates": false, "multitile": false}, {"id": "stockings", "fg": 1244, "rotates": false, "multitile": false}, {"id": "stockings_tent_arms", "fg": 1244, "rotates": false, "multitile": false}, {"id": "stockings_tent_legs", "fg": 1244, "rotates": false, "multitile": false}, {"id": "straw_basket", "fg": 829, "rotates": false, "multitile": false}, {"id": "straw_fedora", "fg": 830, "rotates": false, "multitile": false}, {"id": "straw_hat", "fg": 830, "rotates": false, "multitile": false}, {"id": "straw_sandals", "fg": 1018, "rotates": false, "multitile": false}, {"id": "striped_pants", "fg": 988, "rotates": false, "multitile": false}, {"id": "striped_shirt", "fg": 1058, "rotates": false, "multitile": false}, {"id": "suitcase_l", "fg": 573, "rotates": false, "multitile": false}, {"id": "suitcase_m", "fg": 611, "rotates": false, "multitile": false}, {"id": "suit", "fg": 1051, "rotates": false, "multitile": false}, {"id": "sundress", "fg": 1048, "rotates": false, "multitile": false}, {"id": "sunglasses", "fg": 1127, "rotates": false, "multitile": false}, {"id": "survivor_belt", "fg": 1091, "rotates": false, "multitile": false}, {"id": "survivor_belt_notools", "fg": 1091, "rotates": false, "multitile": false}, {"id": "survivor_duffel_bag", "fg": 1154, "rotates": false, "multitile": false}, {"id": "survivor_pack", "fg": 1150, "rotates": false, "multitile": false}, {"id": "survivor_rucksack", "fg": 1154, "rotates": false, "multitile": false}, {"id": "survivor_runner_pack", "fg": 1150, "rotates": false, "multitile": false}, {"id": "survivor_suit", "fg": 1198, "rotates": false, "multitile": false}, {"id": "survivor_vest", "fg": 1092, "rotates": false, "multitile": false}, {"id": "swat_armor", "fg": 1202, "rotates": false, "multitile": false}, {"id": "sweater", "fg": 1069, "rotates": false, "multitile": false}, {"id": "sweatshirt", "fg": 1068, "rotates": false, "multitile": false}, {"id": "swim_fins", "fg": 1200, "rotates": false, "multitile": false}, {"id": "tabi_dress", "fg": 1009, "rotates": false, "multitile": false}, {"id": "tabi_gi", "fg": 1007, "rotates": false, "multitile": false}, {"id": "tac_fullhelmet", "fg": 1143, "rotates": false, "multitile": false}, {"id": "tac_helmet", "fg": 1203, "rotates": false, "multitile": false}, {"id": "tank_top", "fg": 1061, "rotates": false, "multitile": false}, {"id": "technician_pants_blue", "fg": 789, "rotates": false, "multitile": false}, {"id": "technician_pants_gray", "fg": 1027, "rotates": false, "multitile": false}, {"id": "technician_pants_ltblue", "fg": 1026, "rotates": false, "multitile": false}, {"id": "technician_shirt_blue", "fg": 788, "rotates": false, "multitile": false}, {"id": "technician_shirt_gray", "fg": 1055, "rotates": false, "multitile": false}, {"id": "technician_shirt_ltblue", "fg": 1057, "rotates": false, "multitile": false}, {"id": "thermal_gloves", "fg": 1046, "rotates": false, "multitile": false}, {"id": "thermal_gloves_on", "fg": 1046, "rotates": false, "multitile": false}, {"id": "thermal_mask", "fg": 1134, "rotates": false, "multitile": false}, {"id": "thermal_mask_on", "fg": 1134, "rotates": false, "multitile": false}, {"id": "thermal_outfit", "fg": 1044, "rotates": false, "multitile": false}, {"id": "thermal_outfit_on", "fg": 1044, "rotates": false, "multitile": false}, {"id": "thermal_socks", "fg": 1009, "rotates": false, "multitile": false}, {"id": "thermal_socks_on", "fg": 1009, "rotates": false, "multitile": false}, {"id": "thermal_suit", "fg": 1044, "rotates": false, "multitile": false}, {"id": "thermal_suit_on", "fg": 1044, "rotates": false, "multitile": false}, {"id": "throwing_axe", "fg": 896, "rotates": false, "multitile": false}, {"id": "throwing_knife", "fg": 448, "rotates": false, "multitile": false}, {"id": "tieclip", "fg": 394, "rotates": false, "multitile": false}, {"id": "tights", "fg": 1027, "rotates": false, "multitile": false}, {"id": "tool_belt", "fg": 1091, "rotates": false, "multitile": false}, {"id": "tophat", "fg": 1147, "rotates": false, "multitile": false}, {"id": "touring_suit", "fg": 1217, "rotates": false, "multitile": false}, {"id": "towel_wet", "fg": 1168, "rotates": false, "multitile": false}, {"id": "trenchcoat", "fg": 1082, "rotates": false, "multitile": false}, {"id": "trenchcoat_fur", "fg": 1085, "rotates": false, "multitile": false}, {"id": "trenchcoat_leather", "fg": 1084, "rotates": false, "multitile": false}, {"id": "trenchcoat_survivor", "fg": 1084, "rotates": false, "multitile": false}, {"id": "tricorne", "fg": 1130, "rotates": false, "multitile": false}, {"id": "trunks", "fg": 1023, "rotates": false, "multitile": false}, {"id": "tshirt", "fg": 1055, "rotates": false, "multitile": false}, {"id": "tshirt_text", "fg": 1055, "rotates": false, "multitile": false}, {"id": "tunic_rag", "fg": 1047, "rotates": false, "multitile": false}, {"id": "turban", "fg": 1144, "rotates": false, "multitile": false}, {"id": "tux", "fg": 1052, "rotates": false, "multitile": false}, {"id": "undershirt", "fg": 1055, "rotates": false, "multitile": false}, {"id": "under_armor", "fg": 1072, "rotates": false, "multitile": false}, {"id": "under_armor_shorts", "fg": 1024, "rotates": false, "multitile": false}, {"id": "union_suit", "fg": 1221, "rotates": false, "multitile": false}, {"id": "vest", "fg": 1089, "rotates": false, "multitile": false}, {"id": "vest_leather", "fg": 1090, "rotates": false, "multitile": false}, {"id": "waistcoat", "fg": 1089, "rotates": false, "multitile": false}, {"id": "wetsuit", "fg": 1044, "rotates": false, "multitile": false}, {"id": "wetsuit_booties", "fg": 1009, "rotates": false, "multitile": false}, {"id": "wetsuit_gloves", "fg": 1046, "rotates": false, "multitile": false}, {"id": "wetsuit_hood", "fg": 1144, "rotates": false, "multitile": false}, {"id": "wetsuit_spring", "fg": 1047, "rotates": false, "multitile": false}, {"id": "winter_gloves_army", "fg": 1099, "rotates": false, "multitile": false}, {"id": "winter_jacket_army", "fg": 1093, "rotates": false, "multitile": false}, {"id": "winter_pants_army", "fg": 988, "rotates": false, "multitile": false}, {"id": "wolfsuit", "fg": 1038, "rotates": false, "multitile": false}, {"id": "wool_hoodie", "fg": 1070, "rotates": false, "multitile": false}, {"id": "wool_suit", "fg": 1221, "rotates": false, "multitile": false}, {"id": "wrapped_rad_badge", "fg": 1165, "rotates": false, "multitile": false}, {"id": "wristwatch", "fg": 1191, "rotates": false, "multitile": false}, {"id": "wsurvivor_suit", "fg": 1231, "rotates": false, "multitile": false}, {"id": "xlsurvivor_suit", "fg": 1198, "rotates": false, "multitile": false}, {"id": "zubon_gi", "fg": 988, "rotates": false, "multitile": false}, {"id": "1st_aid", "fg": 1274, "rotates": false}, {"id": "adderall", "fg": 1260, "rotates": false, "multitile": false}, {"id": "antibiotics", "fg": 1266, "rotates": false, "multitile": false}, {"id": "antifungal", "fg": 1269, "rotates": false}, {"id": "antiparasitic", "fg": 1269, "rotates": false}, {"id": "aspirin", "fg": 1269, "rotates": false}, {"id": "bandages", "fg": 1275, "rotates": false}, {"id": "caffeine", "fg": 1270, "rotates": false}, {"id": "cigar", "fg": 1265, "rotates": false, "multitile": false}, {"id": "cigar_butt", "fg": 772, "rotates": false, "multitile": false}, {"id": "cigar_lit", "fg": 771, "rotates": false, "multitile": false}, {"id": "cig", "fg": 1263, "rotates": false, "multitile": false}, {"id": "cig_butt", "fg": 767, "rotates": false, "multitile": false}, {"id": "cig_lit", "fg": 766, "rotates": false, "multitile": false}, {"id": "codeine", "fg": 1258, "rotates": false, "multitile": false}, {"id": "coke", "fg": 348, "rotates": false, "multitile": false}, {"id": "contacts", "fg": 942, "rotates": false}, {"id": "crack", "fg": 1267, "rotates": false, "multitile": false}, {"id": "dayquil", "fg": 1271, "rotates": false}, {"id": "eyedrops", "fg": 1252, "rotates": false}, {"id": "flu_shot", "fg": 1251, "rotates": false, "multitile": false}, {"id": "handrolled_cig", "fg": 768, "rotates": false, "multitile": false}, {"id": "heroin", "fg": 1375, "rotates": false, "multitile": false}, {"id": "inhaler", "fg": 1257, "rotates": false, "multitile": false}, {"id": "inhaler_sewergas", "fg": 1257, "rotates": false, "multitile": false}, {"id": "inhaler_stimgas", "fg": 1257, "rotates": false, "multitile": false}, {"id": "iodine", "fg": 1269, "rotates": false, "multitile": false}, {"id": "joint", "fg": 768, "rotates": false, "multitile": false}, {"id": "joint_lit", "fg": 769, "rotates": false, "multitile": false}, {"id": "joint_roach", "fg": 770, "rotates": false, "multitile": false}, {"id": "lsd", "fg": 1268, "rotates": false, "multitile": false}, {"id": "meth", "fg": 348, "rotates": false, "multitile": false}, {"id": "morphine", "fg": 348, "rotates": false, "multitile": false}, {"id": "oxycodone", "fg": 1254, "rotates": false, "multitile": false}, {"id": "oxygen", "fg": 1253, "rotates": false}, {"id": "oxygen_tank", "fg": 1253, "rotates": false}, {"id": "poppy_pain", "fg": 348, "rotates": false, "multitile": false}, {"id": "poppy_sleep", "fg": 348, "rotates": false, "multitile": false}, {"id": "pur_tablets", "fg": 1269, "rotates": false}, {"id": "quikclot", "fg": 1267, "rotates": false, "multitile": false}, {"id": "thorazine", "fg": 1261, "rotates": false, "multitile": false}, {"id": "tobacco", "fg": 1375, "rotates": false, "multitile": false}, {"id": "tramadol", "fg": 1269, "rotates": false, "multitile": false}, {"id": "vaccine_shot", "fg": 1251, "rotates": false, "multitile": false}, {"id": "vitamins", "fg": 1273, "rotates": false}, {"id": "weed", "fg": 1264, "rotates": false, "multitile": false}, {"id": "xanax", "fg": 1259, "rotates": false, "multitile": false}, {"id": "acorns", "fg": 1285, "rotates": false, "multitile": false}, {"id": "acorns", "fg": 1285, "rotates": false, "multitile": false}, {"id": "acorns_cooked", "fg": 1375, "rotates": false, "multitile": false}, {"id": "ant_egg", "fg": 1341, "rotates": false, "multitile": false}, {"id": "apple", "fg": 1287, "rotates": false, "multitile": false}, {"id": "apple_canned", "fg": 1297, "rotates": false, "multitile": false}, {"id": "apple_vac", "fg": 1297, "rotates": false, "multitile": false}, {"id": "apricot", "fg": 1389, "rotates": false, "multitile": false}, {"id": "arm", "fg": 1339, "rotates": false, "multitile": false}, {"id": "bacon", "fg": 1338, "rotates": false, "multitile": false}, {"id": "banana", "fg": 1288, "rotates": false, "multitile": false}, {"id": "barley", "fg": 1310, "rotates": false, "multitile": false}, {"id": "basketball", "fg": 1378, "rotates": false, "multitile": false}, {"id": "beansnrice", "fg": 348, "rotates": false, "multitile": false}, {"id": "beans_cooked", "fg": 1311, "rotates": false, "multitile": false}, {"id": "beet_syrup", "fg": 932, "rotates": false, "multitile": false}, {"id": "bfipowder", "fg": 348, "rotates": false, "multitile": false}, {"id": "biscuit", "fg": 1367, "rotates": false, "multitile": false}, {"id": "blackberries", "fg": 1306, "rotates": false, "multitile": false}, {"id": "blt", "fg": 1344, "rotates": false, "multitile": false}, {"id": "blueberries", "fg": 1306, "rotates": false, "multitile": false}, {"id": "blueberries_cooked", "fg": 1390, "rotates": false, "multitile": false}, {"id": "bobburger", "fg": 1750, "rotates": false, "multitile": false}, {"id": "boiled_egg", "fg": 1341, "rotates": false, "multitile": false}, {"id": "bologna", "fg": 1329, "rotates": false, "multitile": false}, {"id": "bone", "fg": 952, "rotates": false, "multitile": false}, {"id": "bone_human", "fg": 952, "rotates": false, "multitile": false}, {"id": "bone_tainted", "fg": 825, "rotates": false, "multitile": false}, {"id": "brandy", "fg": 937, "rotates": false, "multitile": false}, {"id": "bread", "fg": 1350, "rotates": false, "multitile": false}, {"id": "brew_bum_wine", "fg": 1409, "rotates": false, "multitile": false}, {"id": "brew_fruit_wine", "fg": 937, "rotates": false, "multitile": false}, {"id": "brioche", "fg": 1350, "rotates": false, "multitile": false}, {"id": "broccoli", "fg": 1313, "rotates": false, "multitile": false}, {"id": "brownie_weed", "fg": 1355, "rotates": false, "multitile": false}, {"id": "buckwheat", "fg": 1375, "rotates": false, "multitile": false}, {"id": "buckwheat_cooked", "fg": 1375, "rotates": false, "multitile": false}, {"id": "caff_gum", "fg": 1340, "rotates": false, "multitile": false}, {"id": "cake2", "fg": 1355, "rotates": false, "multitile": false}, {"id": "cake3", "fg": 1357, "rotates": false, "multitile": false}, {"id": "candy2", "fg": 1302, "rotates": false, "multitile": false}, {"id": "candy3", "fg": 1302, "rotates": false, "multitile": false}, {"id": "candycigarette", "fg": 1391, "rotates": false, "multitile": false}, {"id": "candy", "fg": 1302, "rotates": false, "multitile": false}, {"id": "can_beans", "fg": 1375, "rotates": false, "multitile": false}, {"id": "can_catfood", "fg": 1280, "rotates": false, "multitile": false}, {"id": "can_cheese", "fg": 1374, "rotates": false, "multitile": false}, {"id": "can_chicken", "fg": 1343, "rotates": false, "multitile": false}, {"id": "can_chowder", "fg": 348, "rotates": false, "multitile": false}, {"id": "can_clams", "fg": 348, "rotates": false, "multitile": false}, {"id": "can_coconut", "fg": 1343, "rotates": false, "multitile": false}, {"id": "can_corn", "fg": 1374, "rotates": false, "multitile": false}, {"id": "can_herring", "fg": 908, "rotates": false, "multitile": false}, {"id": "can_pineapple", "fg": 1374, "rotates": false, "multitile": false}, {"id": "can_salmon", "fg": 1280, "rotates": false, "multitile": false}, {"id": "can_sardine", "fg": 908, "rotates": false, "multitile": false}, {"id": "can_spam", "fg": 1280, "rotates": false, "multitile": false}, {"id": "can_tomato", "fg": 1296, "rotates": false, "multitile": false}, {"id": "can_tuna", "fg": 1280, "rotates": false, "multitile": false}, {"id": "carrot", "fg": 1316, "rotates": false, "multitile": false}, {"id": "catfood", "fg": 1280, "rotates": false, "multitile": false}, {"id": "celery", "fg": 749, "rotates": false, "multitile": false}, {"id": "cereal2", "fg": 1292, "rotates": false, "multitile": false}, {"id": "cereal3", "fg": 1292, "rotates": false, "multitile": false}, {"id": "cereal", "fg": 1292, "rotates": false, "multitile": false}, {"id": "chaw", "fg": 1284, "rotates": false, "multitile": false}, {"id": "cheeseburgerhuman", "fg": 1750, "rotates": false, "multitile": false}, {"id": "cheeseburger", "fg": 1750, "rotates": false, "multitile": false}, {"id": "cheese", "fg": 1392, "rotates": false, "multitile": false}, {"id": "cheese_fries", "fg": 1380, "rotates": false, "multitile": false}, {"id": "chem_anfo", "fg": 1280, "rotates": false, "multitile": false}, {"id": "chem_chromium_oxide", "fg": 1284, "rotates": false, "multitile": false}, {"id": "chem_hexamine", "fg": 1334, "rotates": false, "multitile": false}, {"id": "chem_sulphur", "fg": 1374, "rotates": false, "multitile": false}, {"id": "cherries", "fg": 1373, "rotates": false, "multitile": false}, {"id": "chilidogs", "fg": 1330, "rotates": false, "multitile": false}, {"id": "chilidogs_human", "fg": 1330, "rotates": false, "multitile": false}, {"id": "chili", "fg": 1365, "rotates": false, "multitile": false}, {"id": "chili_human", "fg": 1365, "rotates": false, "multitile": false}, {"id": "chilly-p", "fg": 1296, "rotates": false, "multitile": false}, {"id": "chips2", "fg": 1291, "rotates": false, "multitile": false}, {"id": "chips3", "fg": 1291, "rotates": false, "multitile": false}, {"id": "chips", "fg": 1291, "rotates": false, "multitile": false}, {"id": "chocolate", "fg": 1299, "rotates": false, "multitile": false}, {"id": "choco_coffee_beans", "fg": 1285, "rotates": false, "multitile": false}, {"id": "choco_coffee_beans", "fg": 1285, "rotates": false, "multitile": false}, {"id": "chocpretzels", "fg": 1298, "rotates": false, "multitile": false}, {"id": "choc_pancakes", "fg": 1358, "rotates": false, "multitile": false}, {"id": "choc_waffles", "fg": 1360, "rotates": false, "multitile": false}, {"id": "clay_lump", "fg": 1299, "rotates": false, "multitile": false}, {"id": "coconut", "fg": 1378, "rotates": false, "multitile": false}, {"id": "coffee_bean", "fg": 1285, "rotates": false, "multitile": false}, {"id": "coffee_raw", "fg": 1356, "rotates": false, "multitile": false}, {"id": "cola_meth", "fg": 932, "rotates": false, "multitile": false}, {"id": "con_milk", "fg": 1343, "rotates": false, "multitile": false}, {"id": "cooked_burrito", "fg": 1347, "rotates": false, "multitile": false}, {"id": "cooked_dinner", "fg": 1300, "rotates": false, "multitile": false}, {"id": "cookies", "fg": 1367, "rotates": false, "multitile": false}, {"id": "cornbread", "fg": 1324, "rotates": false, "multitile": false}, {"id": "corndogs_cooked", "fg": 1331, "rotates": false, "multitile": false}, {"id": "corndogs_frozen", "fg": 1331, "rotates": false, "multitile": false}, {"id": "cornmeal", "fg": 1374, "rotates": false, "multitile": false}, {"id": "corn", "fg": 1317, "rotates": false, "multitile": false}, {"id": "cotton_ball", "fg": 759, "rotates": false, "multitile": false}, {"id": "cotton_boll", "fg": 1384, "rotates": false, "multitile": false}, {"id": "crackers", "fg": 1361, "rotates": false, "multitile": false}, {"id": "cracklins", "fg": 1320, "rotates": false, "multitile": false}, {"id": "cranberries", "fg": 1309, "bg": 1935, "rotates": false}, {"id": "crispycran", "fg": 937, "rotates": false, "multitile": false}, {"id": "cucumber", "fg": 1314, "rotates": false, "multitile": false}, {"id": "currywurst", "fg": 1330, "rotates": false, "multitile": false}, {"id": "curry_meat", "fg": 1409, "rotates": false, "multitile": false}, {"id": "curry_powder", "fg": 1296, "rotates": false, "multitile": false}, {"id": "dahlia_baked", "fg": 755, "rotates": false, "multitile": false}, {"id": "dahlia_root", "fg": 755, "rotates": false, "multitile": false}, {"id": "dandelion_cooked", "fg": 1284, "rotates": false, "multitile": false}, {"id": "dandelion_fried", "fg": 1402, "rotates": false, "multitile": false}, {"id": "datura_seed", "fg": 1285, "rotates": false, "multitile": false}, {"id": "datura_seed", "fg": 1285, "rotates": false, "multitile": false}, {"id": "deluxe_beansnrice", "fg": 1375, "rotates": false, "multitile": false}, {"id": "deluxe_beans", "fg": 1375, "rotates": false, "multitile": false}, {"id": "deluxe_eggs", "fg": 1292, "rotates": false, "multitile": false}, {"id": "deluxe_rice", "fg": 1374, "rotates": false, "multitile": false}, {"id": "deluxe_veggy_beansnrice", "fg": 1375, "rotates": false, "multitile": false}, {"id": "deluxe_veggy_beans", "fg": 1375, "rotates": false, "multitile": false}, {"id": "deluxe_veggy_rice", "fg": 1374, "rotates": false, "multitile": false}, {"id": "diazepam", "fg": 1269, "rotates": false, "multitile": false}, {"id": "disinfectant", "fg": 931, "rotates": false, "multitile": false}, {"id": "dogbane", "fg": 1278, "rotates": false, "multitile": false}, {"id": "dried_salad", "fg": 1284, "rotates": false, "multitile": false}, {"id": "drink_boozeberry", "fg": 1386, "rotates": false, "multitile": false}, {"id": "drink_strawberry_surprise", "fg": 937, "rotates": false, "multitile": false}, {"id": "dry_beans", "fg": 1311, "rotates": false, "multitile": false}, {"id": "dry_fish", "fg": 908, "rotates": false, "multitile": false}, {"id": "dry_fruit", "fg": 1279, "rotates": false, "multitile": false}, {"id": "dry_hflesh", "fg": 1296, "rotates": false, "multitile": false}, {"id": "dry_meat", "fg": 1296, "rotates": false, "multitile": false}, {"id": "dry_meat_tainted", "fg": 1279, "rotates": false, "multitile": false}, {"id": "dry_mushroom", "fg": 1375, "rotates": false, "multitile": false}, {"id": "dry_rice", "fg": 348, "rotates": false, "multitile": false}, {"id": "dry_veggy", "fg": 1284, "rotates": false, "multitile": false}, {"id": "dry_veggy_tainted", "fg": 1279, "rotates": false, "multitile": false}, {"id": "egg_bird", "fg": 1348, "rotates": false, "multitile": false}, {"id": "egg_reptile", "fg": 1341, "rotates": false, "multitile": false}, {"id": "fat", "fg": 1338, "rotates": false, "multitile": false}, {"id": "fat_tainted", "fg": 1292, "rotates": false, "multitile": false}, {"id": "fchicken", "fg": 1328, "rotates": false, "multitile": false}, {"id": "fertilizer_commercial", "fg": 1374, "rotates": false, "multitile": false}, {"id": "fetus", "fg": 1338, "rotates": false, "multitile": false}, {"id": "fish", "fg": 1305, "rotates": false, "multitile": false}, {"id": "fish_bait_bread", "fg": 1350, "rotates": false, "multitile": false}, {"id": "fish_bait_fish", "fg": 1305, "rotates": false, "multitile": false}, {"id": "fish_bait_meat", "fg": 1305, "rotates": false, "multitile": false}, {"id": "fish_bait_veggy", "fg": 1322, "rotates": false, "multitile": false}, {"id": "fish_canned", "fg": 1323, "rotates": false, "multitile": false}, {"id": "fish_cooked", "fg": 1319, "rotates": false, "multitile": false}, {"id": "fish_fried", "fg": 1324, "rotates": false, "multitile": false}, {"id": "fish_pickled", "fg": 1319, "rotates": false, "multitile": false}, {"id": "fish_sandwich", "fg": 1327, "rotates": false, "multitile": false}, {"id": "fish_smoked", "fg": 1322, "rotates": false, "multitile": false}, {"id": "fish_vac", "fg": 1319, "rotates": false, "multitile": false}, {"id": "flour", "fg": 1343, "rotates": false, "multitile": false}, {"id": "fried_spam", "fg": 1305, "rotates": false, "multitile": false}, {"id": "fries", "fg": 1380, "rotates": false, "multitile": false}, {"id": "frozen_burrito", "fg": 1347, "rotates": false, "multitile": false}, {"id": "frozen_dinner", "fg": 1318, "rotates": false, "multitile": false}, {"id": "fruit_cooked", "fg": 1325, "rotates": false, "multitile": false}, {"id": "fruit_leather", "fg": 1305, "rotates": false, "multitile": false}, {"id": "fruit_pancakes", "fg": 1358, "rotates": false, "multitile": false}, {"id": "fruit_waffles", "fg": 1359, "rotates": false, "multitile": false}, {"id": "fruit_wine", "fg": 937, "rotates": false, "multitile": false}, {"id": "fungal_seeds", "fg": 1370, "rotates": false, "multitile": false}, {"id": "fungicide", "fg": 1250, "rotates": false, "multitile": false}, {"id": "grahmcrackers", "fg": 1361, "rotates": false, "multitile": false}, {"id": "granola", "fg": 1375, "rotates": false, "multitile": false}, {"id": "grapefruit", "fg": 1372, "rotates": false, "multitile": false}, {"id": "grapes", "fg": 1412, "rotates": false, "multitile": false}, {"id": "gummy_vitamins", "fg": 1302, "rotates": false, "multitile": false}, {"id": "gum", "fg": 1255, "rotates": false, "multitile": false}, {"id": "hamburger", "fg": 1750, "rotates": false, "multitile": false}, {"id": "hardtack", "fg": 1361, "rotates": false, "multitile": false}, {"id": "hfleshbologna", "fg": 1329, "rotates": false, "multitile": false}, {"id": "hflesh_vac", "fg": 1296, "rotates": false, "multitile": false}, {"id": "hobo_helper", "fg": 1375, "rotates": false, "multitile": false}, {"id": "honeycomb", "fg": 1335, "rotates": false, "multitile": false}, {"id": "honey_ant", "fg": 1372, "rotates": false, "multitile": false}, {"id": "honey_bottled", "fg": 936, "rotates": false, "multitile": false}, {"id": "hops", "fg": 749, "rotates": false, "multitile": false}, {"id": "horseradish", "fg": 1343, "rotates": false, "multitile": false}, {"id": "hotdogs_cooked", "fg": 1330, "rotates": false, "multitile": false}, {"id": "hotdogs_frozen", "fg": 1330, "rotates": false, "multitile": false}, {"id": "human_canned", "fg": 1277, "rotates": false, "multitile": false}, {"id": "human_cooked", "fg": 1283, "rotates": false, "multitile": false}, {"id": "human_flesh", "fg": 1277, "rotates": false, "multitile": false}, {"id": "human_smoked", "fg": 1300, "rotates": false, "multitile": false}, {"id": "h_currywurst", "fg": 1330, "rotates": false, "multitile": false}, {"id": "insta_salad", "fg": 1284, "rotates": false, "multitile": false}, {"id": "irradiated_apple", "fg": 1287, "rotates": false, "multitile": false}, {"id": "irradiated_apricot", "fg": 1389, "rotates": false, "multitile": false}, {"id": "irradiated_banana", "fg": 1288, "rotates": false, "multitile": false}, {"id": "irradiated_blackberries", "fg": 1306, "rotates": false, "multitile": false}, {"id": "irradiated_blueberries", "fg": 1306, "rotates": false, "multitile": false}, {"id": "irradiated_broccoli", "fg": 1313, "rotates": false, "multitile": false}, {"id": "irradiated_carrot", "fg": 1316, "rotates": false, "multitile": false}, {"id": "irradiated_celery", "fg": 749, "rotates": false, "multitile": false}, {"id": "irradiated_cherries", "fg": 1373, "rotates": false, "multitile": false}, {"id": "irradiated_corn", "fg": 1317, "rotates": false, "multitile": false}, {"id": "irradiated_cranberries", "fg": 1309, "bg": 1935, "rotates": false}, {"id": "irradiated_cucumber", "fg": 1314, "rotates": false, "multitile": false}, {"id": "irradiated_grapefruit", "fg": 1372, "rotates": false, "multitile": false}, {"id": "irradiated_grapes", "fg": 1412, "rotates": false, "multitile": false}, {"id": "irradiated_kiwi", "fg": 1348, "rotates": false, "multitile": false}, {"id": "irradiated_lemon", "fg": 1290, "rotates": false, "multitile": false}, {"id": "irradiated_lettuce", "fg": 1346, "rotates": false, "multitile": false}, {"id": "irradiated_mango", "fg": 1385, "rotates": false, "multitile": false}, {"id": "irradiated_melon", "fg": 1384, "rotates": false, "multitile": false}, {"id": "irradiated_onion", "fg": 1315, "rotates": false, "multitile": false}, {"id": "irradiated_orange", "fg": 1289, "rotates": false, "multitile": false}, {"id": "irradiated_papaya", "fg": 1388, "rotates": false, "multitile": false}, {"id": "irradiated_peach", "fg": 1379, "rotates": false, "multitile": false}, {"id": "irradiated_pear", "fg": 1371, "rotates": false, "multitile": false}, {"id": "irradiated_pineapple", "fg": 1377, "rotates": false, "multitile": false}, {"id": "irradiated_plums", "fg": 1376, "rotates": false, "multitile": false}, {"id": "irradiated_pomegranate", "fg": 1387, "rotates": false, "multitile": false}, {"id": "irradiated_raspberries", "fg": 1373, "rotates": false, "multitile": false}, {"id": "irradiated_rhubarb", "fg": 1411, "rotates": false, "multitile": false}, {"id": "irradiated_strawberries", "fg": 1308, "rotates": false, "multitile": false}, {"id": "irradiated_tomato", "fg": 1312, "rotates": false, "multitile": false}, {"id": "irradiated_watermelon", "fg": 1383, "rotates": false, "multitile": false}, {"id": "irradiated_zucchini", "fg": 1314, "rotates": false, "multitile": false}, {"id": "jam_blueberries", "fg": 1390, "rotates": false, "multitile": false}, {"id": "jam_fruit", "fg": 1325, "rotates": false, "multitile": false}, {"id": "jam_strawberries", "fg": 1325, "rotates": false, "multitile": false}, {"id": "jerky", "fg": 1300, "rotates": false, "multitile": false}, {"id": "jerky_human", "fg": 1300, "rotates": false, "multitile": false}, {"id": "jihelucake", "fg": 1357, "rotates": false, "multitile": false}, {"id": "johnnycake", "fg": 1324, "rotates": false, "multitile": false}, {"id": "juice_pulp", "fg": 1280, "rotates": false, "multitile": false}, {"id": "kernels", "fg": 1294, "rotates": false, "multitile": false}, {"id": "ketchup", "fg": 1325, "rotates": false, "multitile": false}, {"id": "kiwi", "fg": 1348, "rotates": false, "multitile": false}, {"id": "lard", "fg": 1340, "rotates": false, "multitile": false}, {"id": "lasagne", "fg": 1368, "rotates": false, "multitile": false}, {"id": "lasagne_cooked", "fg": 972, "rotates": false, "multitile": false}, {"id": "lasagne_raw", "fg": 972, "rotates": false, "multitile": false}, {"id": "leg", "fg": 1339, "rotates": false, "multitile": false}, {"id": "lemonade", "fg": 1395, "rotates": false}, {"id": "lemon", "fg": 1290, "rotates": false, "multitile": false}, {"id": "lettuce", "fg": 1346, "rotates": false, "multitile": false}, {"id": "luigilasagne", "fg": 1368, "rotates": false, "multitile": false}, {"id": "lunchmeat", "fg": 1305, "rotates": false, "multitile": false}, {"id": "lutefisk", "fg": 1323, "rotates": false, "multitile": false}, {"id": "macaroni_cooked", "fg": 1311, "rotates": false, "multitile": false}, {"id": "macaroni_helper", "fg": 1375, "rotates": false, "multitile": false}, {"id": "macaroni_raw", "fg": 1285, "rotates": false, "multitile": false}, {"id": "maltballs", "fg": 1285, "rotates": false, "multitile": false}, {"id": "maltballs", "fg": 1285, "rotates": false, "multitile": false}, {"id": "mango", "fg": 1385, "rotates": false, "multitile": false}, {"id": "mannwurstgravy", "fg": 1332, "rotates": false, "multitile": false}, {"id": "mannwurst", "fg": 1330, "rotates": false, "multitile": false}, {"id": "manwich", "fg": 1750, "rotates": false, "multitile": false}, {"id": "marloss_berry", "fg": 1342, "rotates": false, "multitile": false}, {"id": "marloss_gel", "fg": 936, "rotates": false, "multitile": false}, {"id": "marloss_seed", "fg": 1403, "rotates": false, "multitile": false}, {"id": "marshmallow", "fg": 1334, "rotates": false, "multitile": false}, {"id": "material_aluminium_ingot", "fg": 831, "rotates": false, "multitile": false}, {"id": "material_quicklime", "fg": 348, "rotates": false, "multitile": false}, {"id": "material_sand", "fg": 908, "rotates": false, "multitile": false}, {"id": "mayonnaise", "fg": 1343, "rotates": false, "multitile": false}, {"id": "meal_bone", "fg": 1343, "rotates": false, "multitile": false}, {"id": "meal_chitin_piece", "fg": 347, "rotates": false, "multitile": false}, {"id": "meat", "fg": 1277, "rotates": false, "multitile": false}, {"id": "meat_aspic", "fg": 1305, "rotates": false, "multitile": false}, {"id": "meat_canned", "fg": 1277, "rotates": false, "multitile": false}, {"id": "meat_cooked", "fg": 1283, "rotates": false, "multitile": false}, {"id": "meat_smoked", "fg": 1300, "rotates": false, "multitile": false}, {"id": "meat_tainted", "fg": 1281, "rotates": false, "multitile": false}, {"id": "meat_vac", "fg": 1296, "rotates": false, "multitile": false}, {"id": "melon", "fg": 1384, "rotates": false, "multitile": false}, {"id": "milk_coffee", "fg": 932, "rotates": false, "multitile": false}, {"id": "milk_powder", "fg": 348, "rotates": false, "multitile": false}, {"id": "milk_tea", "fg": 932, "rotates": false, "multitile": false}, {"id": "mintpatties", "fg": 1378, "rotates": false, "multitile": false}, {"id": "morel_cooked", "fg": 1303, "rotates": false, "multitile": false}, {"id": "morel_fried", "fg": 1303, "rotates": false, "multitile": false}, {"id": "mre_beef", "fg": 1300, "rotates": false, "multitile": false}, {"id": "mre_beef_box", "fg": 1354, "rotates": false, "multitile": false}, {"id": "mre_chicken", "fg": 1318, "rotates": false, "multitile": false}, {"id": "mre_chicken_box", "fg": 1354, "rotates": false, "multitile": false}, {"id": "mre_hotdogs", "fg": 1320, "rotates": false, "multitile": false}, {"id": "mre_hotdog_box", "fg": 1354, "rotates": false, "multitile": false}, {"id": "mre_ravioli", "fg": 1311, "rotates": false, "multitile": false}, {"id": "mre_ravioli_box", "fg": 1354, "rotates": false, "multitile": false}, {"id": "mre_veggy", "fg": 1285, "rotates": false, "multitile": false}, {"id": "mre_veggy_box", "fg": 1354, "rotates": false, "multitile": false}, {"id": "mushroom", "fg": 1303, "rotates": false, "multitile": false}, {"id": "mushroom_magic", "fg": 1303, "rotates": false, "multitile": false}, {"id": "mushroom_morel", "fg": 1303, "rotates": false, "multitile": false}, {"id": "mushroom_poison", "fg": 1303, "rotates": false, "multitile": false}, {"id": "mustard", "fg": 936, "rotates": false, "multitile": false}, {"id": "mycus_fruit", "fg": 1405, "rotates": false, "multitile": false}, {"id": "nachosc", "fg": 1333, "rotates": false, "multitile": false}, {"id": "nachoshc", "fg": 1333, "rotates": false, "multitile": false}, {"id": "nachoshf", "fg": 1333, "rotates": false, "multitile": false}, {"id": "nachosmc", "fg": 1333, "rotates": false, "multitile": false}, {"id": "nachosm", "fg": 1333, "rotates": false, "multitile": false}, {"id": "nachos", "fg": 1333, "rotates": false, "multitile": false}, {"id": "neccowafers", "fg": 1302, "rotates": false, "multitile": false}, {"id": "noodles_fast", "fg": 1324, "rotates": false, "multitile": false}, {"id": "nyquil", "fg": 1272, "rotates": false}, {"id": "oatmeal", "fg": 1267, "rotates": false, "multitile": false}, {"id": "oatmeal_cooked", "fg": 1293, "rotates": false, "multitile": false}, {"id": "oatmeal_deluxe", "fg": 1293, "rotates": false, "multitile": false}, {"id": "onigiri", "fg": 1334, "rotates": false, "multitile": false}, {"id": "onion", "fg": 1315, "rotates": false, "multitile": false}, {"id": "onion_rings", "fg": 1381, "rotates": false, "multitile": false}, {"id": "orange", "fg": 1289, "rotates": false, "multitile": false}, {"id": "pancakes", "fg": 1358, "rotates": false, "multitile": false}, {"id": "papaya", "fg": 1388, "rotates": false, "multitile": false}, {"id": "peach", "fg": 1379, "rotates": false, "multitile": false}, {"id": "peanutbutter", "fg": 1375, "rotates": false, "multitile": false}, {"id": "pear", "fg": 1371, "rotates": false, "multitile": false}, {"id": "pelmeni", "fg": 1311, "rotates": false, "multitile": false}, {"id": "pemmican", "fg": 1322, "rotates": false, "multitile": false}, {"id": "pickle", "fg": 1314, "rotates": false, "multitile": false}, {"id": "pie", "fg": 1351, "rotates": false, "multitile": false}, {"id": "pie_human", "fg": 1351, "rotates": false, "multitile": false}, {"id": "pie_meat", "fg": 1351, "rotates": false, "multitile": false}, {"id": "pills_sleep", "fg": 1254, "rotates": false, "multitile": false}, {"id": "pineapple", "fg": 1377, "rotates": false, "multitile": false}, {"id": "pine_bough", "fg": 1264, "rotates": false, "multitile": false}, {"id": "pine_nuts", "fg": 1267, "rotates": false, "multitile": false}, {"id": "pizza_human", "fg": 1353, "rotates": false, "multitile": false}, {"id": "pizza_meat", "fg": 1353, "rotates": false, "multitile": false}, {"id": "pizza_veggy", "fg": 1352, "rotates": false, "multitile": false}, {"id": "plant_sac", "fg": 1276, "rotates": false, "multitile": false}, {"id": "plums", "fg": 1376, "rotates": false, "multitile": false}, {"id": "pomegranate", "fg": 1387, "rotates": false, "multitile": false}, {"id": "popcorn2", "fg": 1295, "rotates": false, "multitile": false}, {"id": "popcorn3", "fg": 1295, "rotates": false, "multitile": false}, {"id": "popcorn", "fg": 1295, "rotates": false, "multitile": false}, {"id": "porkstick", "fg": 1320, "rotates": false, "multitile": false}, {"id": "pork_beans", "fg": 1375, "rotates": false, "multitile": false}, {"id": "potato_baked", "fg": 1349, "rotates": false, "multitile": false}, {"id": "potato_irradiated", "fg": 1348, "rotates": false, "multitile": false}, {"id": "potato_raw", "fg": 1348, "rotates": false, "multitile": false}, {"id": "powder_candy", "fg": 1345, "rotates": false, "multitile": false}, {"id": "powder_eggs", "fg": 1374, "rotates": false, "multitile": false}, {"id": "pretzels", "fg": 1298, "rotates": false, "multitile": false}, {"id": "protein_drink", "fg": 1301, "rotates": false, "multitile": false}, {"id": "protein_powder", "fg": 1267, "rotates": false, "multitile": false}, {"id": "prozac", "fg": 1262, "rotates": false, "multitile": false}, {"id": "pudding", "fg": 1343, "rotates": false, "multitile": false}, {"id": "raspberries", "fg": 1373, "rotates": false, "multitile": false}, {"id": "ravioli", "fg": 1311, "rotates": false, "multitile": false}, {"id": "raw_beans", "fg": 1285, "rotates": false, "multitile": false}, {"id": "raw_dandelion", "fg": 1402, "rotates": false, "multitile": false}, {"id": "rehydrated_fish", "fg": 348, "rotates": false, "multitile": false}, {"id": "rehydrated_fruit", "fg": 1280, "rotates": false, "multitile": false}, {"id": "rehydrated_hflesh", "fg": 1297, "rotates": false, "multitile": false}, {"id": "rehydrated_meat", "fg": 1297, "rotates": false, "multitile": false}, {"id": "rehydrated_veggy", "fg": 1286, "rotates": false, "multitile": false}, {"id": "rehydrated_veggy", "fg": 1286, "rotates": false, "multitile": false}, {"id": "rhubarb", "fg": 1411, "rotates": false, "multitile": false}, {"id": "rice_cooked", "fg": 348, "rotates": false, "multitile": false}, {"id": "roasted_coffee_bean", "fg": 1285, "rotates": false, "multitile": false}, {"id": "royal_beef", "fg": 1283, "rotates": false, "multitile": false}, {"id": "royal_jelly", "fg": 1337, "rotates": false, "multitile": false}, {"id": "salted_fish", "fg": 1323, "rotates": false, "multitile": false}, {"id": "salt", "fg": 1343, "rotates": false, "multitile": false}, {"id": "sandwich_cheese", "fg": 1327, "rotates": false, "multitile": false}, {"id": "sandwich_cheese_grilled", "fg": 1327, "rotates": false, "multitile": false}, {"id": "sandwich_human", "fg": 1750, "rotates": false, "multitile": false}, {"id": "sandwich_jam", "fg": 1344, "rotates": false, "multitile": false}, {"id": "sandwich_pbh", "fg": 1327, "rotates": false, "multitile": false}, {"id": "sandwich_pbj", "fg": 1344, "rotates": false, "multitile": false}, {"id": "sandwich_pb", "fg": 1750, "rotates": false, "multitile": false}, {"id": "sandwich_sauce", "fg": 1750, "rotates": false, "multitile": false}, {"id": "sashimi", "fg": 1305, "rotates": false, "multitile": false}, {"id": "sauce_pesto", "fg": 1326, "rotates": false, "multitile": false}, {"id": "sauce_red", "fg": 1325, "rotates": false, "multitile": false}, {"id": "sausagegravy", "fg": 1332, "rotates": false, "multitile": false}, {"id": "sausage", "fg": 1330, "rotates": false, "multitile": false}, {"id": "scrambled_eggs", "fg": 1292, "rotates": false, "multitile": false}, {"id": "seasoning_italian", "fg": 1326, "rotates": false, "multitile": false}, {"id": "seasoning_salt", "fg": 1267, "rotates": false, "multitile": false}, {"id": "seed_barley", "fg": 1311, "rotates": false, "multitile": false}, {"id": "seed_blueberries", "fg": 1307, "rotates": false, "multitile": false}, {"id": "seed_broccoli", "fg": 1285, "rotates": false, "multitile": false}, {"id": "seed_carrot", "fg": 1311, "rotates": false, "multitile": false}, {"id": "seed_corn", "fg": 1294, "rotates": false, "multitile": false}, {"id": "seed_cotton_boll", "fg": 1311, "rotates": false, "multitile": false}, {"id": "seed_dogbane", "fg": 1311, "rotates": false, "multitile": false}, {"id": "seed_hops", "fg": 755, "rotates": false, "multitile": false}, {"id": "seed_lettuce", "fg": 1311, "rotates": false, "multitile": false}, {"id": "seed_onion", "fg": 1285, "rotates": false, "multitile": false}, {"id": "seed_strawberries", "fg": 1309, "rotates": false, "multitile": false}, {"id": "seed_sugar_beet", "fg": 1311, "rotates": false, "multitile": false}, {"id": "seed_tomato", "fg": 1311, "rotates": false, "multitile": false}, {"id": "seed_weed", "fg": 1311, "rotates": false, "multitile": false}, {"id": "seed_wheat", "fg": 1311, "rotates": false, "multitile": false}, {"id": "slime_scrap", "fg": 935, "rotates": false, "multitile": false}, {"id": "sloppyjoe", "fg": 1750, "rotates": false, "multitile": false}, {"id": "smores", "fg": 1750, "rotates": false, "multitile": false}, {"id": "smoxygen_tank", "fg": 1253, "rotates": false}, {"id": "soup_chicken", "fg": 1301, "rotates": false, "multitile": false}, {"id": "soup_dumplings", "fg": 1301, "rotates": false, "multitile": false}, {"id": "soup_fish", "fg": 1301, "rotates": false, "multitile": false}, {"id": "soup_mushroom", "fg": 1301, "rotates": false, "multitile": false}, {"id": "soup_tomato", "fg": 1409, "rotates": false, "multitile": false}, {"id": "soysauce", "fg": 932, "rotates": false, "multitile": false}, {"id": "spaghetti_bolognese", "fg": 1365, "rotates": false, "multitile": false}, {"id": "spaghetti_cooked", "fg": 1321, "rotates": false, "multitile": false}, {"id": "spaghetti_human", "fg": 1365, "rotates": false, "multitile": false}, {"id": "spaghetti_pesto", "fg": 1366, "rotates": false, "multitile": false}, {"id": "spaghetti_raw", "fg": 1320, "rotates": false, "multitile": false}, {"id": "spider_egg", "fg": 759, "rotates": false, "multitile": false}, {"id": "strawberries", "fg": 1308, "rotates": false, "multitile": false}, {"id": "strawberries_cooked", "fg": 1325, "rotates": false, "multitile": false}, {"id": "sugar", "fg": 1343, "rotates": false, "multitile": false}, {"id": "sugar_beet", "fg": 757, "rotates": false, "multitile": false}, {"id": "sugar_fried", "fg": 1356, "rotates": false, "multitile": false}, {"id": "sushi_fishroll", "fg": 1404, "rotates": false, "multitile": false}, {"id": "sushi_meatroll", "fg": 1404, "rotates": false, "multitile": false}, {"id": "sushi_rice", "fg": 348, "rotates": false, "multitile": false}, {"id": "sushi_veggyroll", "fg": 1404, "rotates": false, "multitile": false}, {"id": "taco", "fg": 1369, "rotates": false, "multitile": false}, {"id": "taint_tornado", "fg": 1409, "rotates": false, "multitile": false}, {"id": "tallow", "fg": 1340, "rotates": false, "multitile": false}, {"id": "tallow_tainted", "fg": 831, "rotates": false, "multitile": false}, {"id": "tea_bark", "fg": 932, "rotates": false, "multitile": false}, {"id": "tea_raw", "fg": 1326, "rotates": false, "multitile": false}, {"id": "tiotaco", "fg": 1369, "rotates": false, "multitile": false}, {"id": "toastem2", "fg": 1350, "rotates": false, "multitile": false}, {"id": "toastem3", "fg": 1350, "rotates": false, "multitile": false}, {"id": "toastem", "fg": 1350, "rotates": false, "multitile": false}, {"id": "toasterpastryfrozen", "fg": 1350, "rotates": false, "multitile": false}, {"id": "toasterpastry", "fg": 1322, "rotates": false, "multitile": false}, {"id": "tomato", "fg": 1312, "rotates": false, "multitile": false}, {"id": "tool_rocket_candy", "fg": 1383, "rotates": false, "multitile": false}, {"id": "tool_rocket_candy_act", "fg": 1383, "rotates": false, "multitile": false}, {"id": "unfinished_charcoal", "fg": 1322, "rotates": false, "multitile": false}, {"id": "veggy", "fg": 1278, "rotates": false, "multitile": false}, {"id": "veggy_canned", "fg": 1284, "rotates": false, "multitile": false}, {"id": "veggy_cooked", "fg": 1285, "rotates": false, "multitile": false}, {"id": "veggy_cooked", "fg": 1285, "rotates": false, "multitile": false}, {"id": "veggy_salad", "fg": 1284, "rotates": false, "multitile": false}, {"id": "veggy_tainted", "fg": 1282, "rotates": false, "multitile": false}, {"id": "veggy_vac", "fg": 1284, "rotates": false, "multitile": false}, {"id": "veggy_wild", "fg": 1278, "rotates": false, "multitile": false}, {"id": "veggy_wild_cooked", "fg": 1285, "rotates": false, "multitile": false}, {"id": "veggy_wild_cooked", "fg": 1285, "rotates": false, "multitile": false}, {"id": "vibrator", "fg": 1332, "rotates": false, "multitile": false}, {"id": "waffles", "fg": 1359, "rotates": false, "multitile": false}, {"id": "wastebread", "fg": 1350, "rotates": false, "multitile": false}, {"id": "watermelon", "fg": 1383, "rotates": false, "multitile": false}, {"id": "wheat", "fg": 1310, "rotates": false, "multitile": false}, {"id": "wild_herbs", "fg": 1284, "rotates": false, "multitile": false}, {"id": "yeast", "fg": 348, "rotates": false, "multitile": false}, {"id": "yoghurt", "fg": 1343, "rotates": false, "multitile": false}, {"id": "zucchini", "fg": 1314, "rotates": false, "multitile": false}, {"id": "vp_aisle_horizontal", "fg": 1472, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_aisle_horizontal", "fg": 1472, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_aisle_lights", "fg": 1448, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_aisle_vertical", "fg": 1490, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_aisle_vertical", "fg": 1490, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_alternator_car", "fg": 1424, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_alternator_motorbike", "fg": 1424, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_alternator_truck", "fg": 1424, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_basketlg", "fg": 1469, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_basketlg_folding", "fg": 1469, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_basketsm", "fg": 1469, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_battery_car", "fg": 1499, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_battery_motorbike", "fg": 1499, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_battery_truck", "fg": 1499, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_bed", "fg": 1454, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_blade_horizontal", "fg": 1459, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1505}]}, {"id": "vp_blade_vertical", "fg": 2128, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1505}]}, {"id": "vp_board_horizontal", "fg": 1484, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_board_ne", "fg": 1485, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_board_nw", "fg": 1487, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_board_se", "fg": 1486, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_board_sw", "fg": 1488, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_board_vertical", "fg": 1483, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_box", "fg": 1469, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_cam_control", "fg": 1442, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_cargo_space", "fg": 1481, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_chemlab", "fg": 915, "rotates": false, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1479}]}, {"id": "vp_controls", "fg": 881, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_craft_rig", "fg": 1478, "rotates": false, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1479}]}, {"id": "vp_diesel_engine_i6", "fg": 873, "rotates": true}, {"id": "vp_diesel_engine_v6", "fg": 873, "rotates": true}, {"id": "vp_diesel_engine_v8", "fg": 873, "rotates": true}, {"id": "vp_diesel_tank", "fg": 1435, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_diesel_tank_little", "fg": 1435, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_diesel_tank_small", "fg": 1435, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_door", "fg": 1456, "rotates": false, "multitile": true, "additional_tiles": [{"id": "open", "fg": 1457}, {"id": "broken", "fg": 1470}]}, {"id": "vp_door_internal", "fg": 1456, "rotates": false, "multitile": true, "additional_tiles": [{"id": "open", "fg": 1457}, {"id": "broken", "fg": 1470}]}, {"id": "vp_door_motor", "fg": 1446, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_door_opaque", "fg": 1456, "rotates": false, "multitile": true, "additional_tiles": [{"id": "open", "fg": 1457}, {"id": "broken", "fg": 1470}]}, {"id": "vp_door_shutter", "fg": 1471, "rotates": false, "multitile": true, "additional_tiles": [{"id": "open", "fg": 1474}, {"id": "broken", "fg": 1480}]}, {"id": "vp_door_sliding", "fg": 1471, "rotates": false, "multitile": true, "additional_tiles": [{"id": "open", "fg": 1474}, {"id": "broken", "fg": 1480}]}, {"id": "vp_door_trunk", "fg": 1471, "rotates": false, "multitile": true, "additional_tiles": [{"id": "open", "fg": 1474}, {"id": "broken", "fg": 1480}]}, {"id": "vp_door_wood", "fg": 1437, "rotates": false, "multitile": true, "additional_tiles": [{"id": "open", "fg": 1438}, {"id": "broken", "fg": 1439}]}, {"id": "vp_drive_by_wire_controls", "fg": 1443, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_engine_1cyl", "fg": 873, "rotates": true}, {"id": "vp_engine_1cyl_small", "fg": 873, "rotates": true}, {"id": "vp_engine_electric", "fg": 873, "rotates": true}, {"id": "vp_engine_electric_large", "fg": 873, "rotates": true}, {"id": "vp_engine_electric_small", "fg": 873, "rotates": true}, {"id": "vp_engine_foot_crank", "fg": 1468, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_engine_gas_1cyl", "fg": 1468, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_engine_gas_i4", "fg": 1468, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_engine_gas_v2", "fg": 1468, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_engine_gas_v6", "fg": 1468, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_engine_gas_v8", "fg": 1468, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_engine_inline4", "fg": 873, "rotates": true}, {"id": "vp_engine_motor", "fg": 1468, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_engine_motor_large", "fg": 1468, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_engine_plasma", "fg": 1468, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_engine_v12", "fg": 873, "rotates": true}, {"id": "vp_engine_v6", "fg": 873, "rotates": true}, {"id": "vp_engine_v8", "fg": 873, "rotates": true}, {"id": "vp_engine_vtwin", "fg": 873, "rotates": true}, {"id": "vp_external_diesel_tank", "fg": 1436, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_external_gas_tank", "fg": 1529, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_flamethrower", "fg": 1508, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_floodlight", "fg": 1510, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_folding_frame", "fg": 1515, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1505}]}, {"id": "vp_folding_seat", "fg": 1482, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_foot_pedals", "fg": 1468, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_frame_cover", "fg": 1468, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_frame_cross", "fg": 1489, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_frame_handle", "fg": 1468, "rotates": true}, {"id": "vp_frame_horizontal", "fg": 1496, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_frame_horizontal_2", "fg": 1496, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_frame_ne", "fg": 1495, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_frame_nw", "fg": 1495, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_frame_se", "fg": 1495, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_frame_sw", "fg": 1495, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_frame_vertical", "fg": 1495, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_frame_vertical_2", "fg": 1495, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_frame_wood_cover", "fg": 1417, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_frame_wood_cross", "fg": 1416, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_frame_wood_handle", "fg": 1417, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_frame_wood_horizontal", "fg": 1415, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_frame_wood_horizontal_2", "fg": 1415, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_frame_wood_light_cover", "fg": 1417, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_frame_wood_light_cross", "fg": 1416, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_frame_wood_light_handle", "fg": 1417, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_frame_wood_light_horizontal", "fg": 1415, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_frame_wood_light_horizontal_2", "fg": 1415, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_frame_wood_light_ne", "fg": 1414, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_frame_wood_light_nw", "fg": 1414, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_frame_wood_light_se", "fg": 1414, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_frame_wood_light_sw", "fg": 1414, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_frame_wood_light_vertical", "fg": 1414, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_frame_wood_light_vertical_2", "fg": 1414, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_frame_wood_ne", "fg": 1414, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_frame_wood_nw", "fg": 1414, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_frame_wood_se", "fg": 1414, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_frame_wood_sw", "fg": 1414, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_frame_wood_vertical", "fg": 1414, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_frame_wood_vertical_2", "fg": 1414, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_fuel_tank_batt", "fg": 1499, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_fuel_tank_gas", "fg": 1498, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_fuel_tank_hydrogen", "fg": 1501, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_fuel_tank_plut", "fg": 1500, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_fuel_tank_water", "fg": 1502, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_fusion_gun", "fg": 1511, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1450}]}, {"id": "vp_gas_tank", "fg": 1498, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_gas_tank_little", "fg": 1498, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_gas_tank_small", "fg": 1498, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_halfboard_cover", "fg": 1468, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_halfboard_cross", "fg": 1503, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_halfboard_horizontal", "fg": 1484, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_halfboard_horizontal_2", "fg": 1484, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_halfboard_ne", "fg": 1485, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_halfboard_nw", "fg": 1487, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_halfboard_se", "fg": 1486, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_halfboard_sw", "fg": 1488, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_halfboard_vertical", "fg": 1483, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_halfboard_vertical_2", "fg": 1483, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_hand_rims", "fg": 783, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_hard_plate", "fg": 1494, "rotates": true}, {"id": "vp_hatch", "fg": 1471, "rotates": false, "multitile": true, "additional_tiles": [{"id": "open", "fg": 1474}, {"id": "broken", "fg": 1480}]}, {"id": "vp_hdboard_horizontal", "fg": 1522, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1519}]}, {"id": "vp_hdboard_ne", "fg": 1523, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1519}]}, {"id": "vp_hdboard_nw", "fg": 1525, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1519}]}, {"id": "vp_hdboard_se", "fg": 1524, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1519}]}, {"id": "vp_hdboard_sw", "fg": 1526, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1519}]}, {"id": "vp_hdboard_vertical", "fg": 1521, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1519}]}, {"id": "vp_hdframe_cover", "fg": 1520, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1519}]}, {"id": "vp_hdframe_cross", "fg": 1518, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1519}]}, {"id": "vp_hdframe_horizontal", "fg": 1517, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1519}]}, {"id": "vp_hdframe_horizontal_2", "fg": 1517, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1519}]}, {"id": "vp_hdframe_ne", "fg": 1516, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1519}]}, {"id": "vp_hdframe_nw", "fg": 1516, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1519}]}, {"id": "vp_hdframe_se", "fg": 1516, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1519}]}, {"id": "vp_hdframe_sw", "fg": 1516, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1519}]}, {"id": "vp_hdframe_vertical", "fg": 1516, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1519}]}, {"id": "vp_hdframe_vertical_2", "fg": 1516, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1519}]}, {"id": "vp_hdhatch", "fg": 1426, "rotates": false, "multitile": true, "additional_tiles": [{"id": "open", "fg": 1427}, {"id": "broken", "fg": 1428}]}, {"id": "vp_hdroof", "fg": 1425, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_headlight", "fg": 1510, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_headlight_reinforced", "fg": 916, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_head_light", "fg": 1510, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_horn_bicycle", "fg": 1513, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_horn_big", "fg": 1512, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_horn_car", "fg": 1512, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_hydrogen_tank", "fg": 1501, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_jumper_cable", "fg": 1433, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_jumper_cable_heavy", "fg": 1433, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_kitchen_unit", "fg": 865, "rotates": false, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1479}]}, {"id": "vp_laser_gun", "fg": 1511, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1450}]}, {"id": "vp_light_blue", "fg": 872, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_light_red", "fg": 871, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_lit_aisle_horizontal", "fg": 1447, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_lit_aisle_horizontal", "fg": 1447, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_lit_aisle_vertical", "fg": 1448, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_lit_aisle_vertical", "fg": 1448, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_m249", "fg": 1507, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1451}]}, {"id": "vp_medium_storage_battery", "fg": 1499, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_metal_wheel", "fg": 1465, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1475}]}, {"id": "vp_minifridge", "fg": 866, "rotates": false, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1479}]}, {"id": "vp_minireactor", "fg": 1500, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_mounted_browning", "fg": 1533, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1519}]}, {"id": "vp_mounted_mk19", "fg": 1533, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1519}]}, {"id": "vp_mounted_rm298", "fg": 1449, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_mounted_rm614", "fg": 1449, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_muffler", "fg": 1506, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_muffler", "fg": 883, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_omnicam", "fg": 1444, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_plasmagun", "fg": 1509, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1451}]}, {"id": "vp_plasma_gun", "fg": 1509, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1451}]}, {"id": "vp_plating_bone", "fg": 1440, "rotates": true}, {"id": "vp_plating_chitin", "fg": 1491, "rotates": true}, {"id": "vp_plating_hard", "fg": 1494, "rotates": true}, {"id": "vp_plating_military", "fg": 1528, "rotates": true}, {"id": "vp_plating_spiked", "fg": 1493, "rotates": true}, {"id": "vp_plating_steel", "fg": 1491, "rotates": true}, {"id": "vp_plating_superalloy", "fg": 1492, "rotates": true}, {"id": "vp_plating_wood", "fg": 1527, "rotates": true}, {"id": "vp_recharge_station", "fg": 917, "rotates": false, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1479}]}, {"id": "vp_reclining_seat", "fg": 1482, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_reinforced_solar_panel", "fg": 877, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1477}]}, {"id": "vp_reinforced_solar_panel_v2", "fg": 877, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1477}]}, {"id": "vp_reinforced_windshield", "fg": 1463, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1462}]}, {"id": "vp_robot_controls", "fg": 1445, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_roller_drum", "fg": 1432, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_roof", "fg": 1455, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_roof_cloth", "fg": 1455, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_roof_wood", "fg": 1455, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_saddle", "fg": 1482, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_seatbelt", "fg": 883, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 882}]}, {"id": "vp_seatbelt_heavyduty", "fg": 1530, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 882}]}, {"id": "vp_seat", "fg": 1482, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_seat_wood", "fg": 1441, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_small_storage_battery", "fg": 1499, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_solar_panel", "fg": 876, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1476}]}, {"id": "vp_solar_panel_v2", "fg": 876, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1476}]}, {"id": "vp_solar_panel_v3", "fg": 876, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1476}]}, {"id": "vp_spiked_plate", "fg": 1493, "rotates": true}, {"id": "vp_spike", "fg": 1461, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1505}]}, {"id": "vp_spike_horizontal", "fg": 1460, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1505}]}, {"id": "vp_spike_vertical", "fg": 1461, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1505}]}, {"id": "vp_spike_wood", "fg": 1973, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_steel_plate", "fg": 1491, "rotates": true}, {"id": "vp_stereo", "fg": 1429, "rotates": false, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1479}]}, {"id": "vp_storage_battery", "fg": 1499, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_storage_battery_mount", "fg": 1452, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_storage_battery_removable", "fg": 1499, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_stowboard_horizontal", "fg": 1534, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_stowboard_vertical", "fg": 1535, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_superalloy_plate", "fg": 1492, "rotates": true}, {"id": "vp_tracker", "fg": 926, "rotates": false, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_travois", "fg": 1434, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_trunk", "fg": 1473, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_trunk_floor", "fg": 1481, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_vehicle_alarm", "fg": 926, "rotates": false, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_veh_forge", "fg": 879, "rotates": false, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1479}]}, {"id": "vp_veh_table", "fg": 914, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_v_curtain", "fg": 1531, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_watercannon", "fg": 1509, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1453}]}, {"id": "vp_water_faucet", "fg": 1532, "rotates": false, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1479}]}, {"id": "vp_water_tank", "fg": 1502, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1497}]}, {"id": "vp_welding_rig", "fg": 878, "rotates": false, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1479}]}, {"id": "vp_wheel", "fg": 1465, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1475}]}, {"id": "vp_wheel_armor", "fg": 1514, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1475}]}, {"id": "vp_wheel_bicycle", "fg": 1467, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1475}]}, {"id": "vp_wheel_caster", "fg": 1467, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1475}]}, {"id": "vp_wheel_motorbike", "fg": 1464, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1475}]}, {"id": "vp_wheel_small", "fg": 1467, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1475}]}, {"id": "vp_wheel_underbody", "fg": 1465, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1475}]}, {"id": "vp_wheel_unicycle", "fg": 1464, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1475}]}, {"id": "vp_wheel_wheelchair", "fg": 1464, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1475}]}, {"id": "vp_wheel_wide", "fg": 1466, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1475}]}, {"id": "vp_wheel_wood", "fg": 1430, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_wheel_wood_b", "fg": 1431, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_windshield", "fg": 1458, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1462}]}, {"id": "vp_wing_mirror", "fg": 1413, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_woodboard_horizontal", "fg": 1419, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_woodboard_ne", "fg": 1420, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_woodboard_nw", "fg": 1422, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_woodboard_se", "fg": 1421, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_woodboard_sw", "fg": 1423, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_woodboard_vertical", "fg": 1418, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_woodhalfboard_horizontal", "fg": 1419, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_woodhalfboard_horizontal_2", "fg": 1419, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_woodhalfboard_ne", "fg": 1420, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_woodhalfboard_nw", "fg": 1422, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_woodhalfboard_se", "fg": 1421, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_woodhalfboard_sw", "fg": 1423, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_woodhalfboard_vertical", "fg": 1418, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_woodhalfboard_vertical_2", "fg": 1418, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1504}]}, {"id": "vp_xlframe_cross", "fg": 1489, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1505}]}, {"id": "vp_xlframe_horizontal", "fg": 1515, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1505}]}, {"id": "vp_xlframe_horizontal_2", "fg": 1515, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1505}]}, {"id": "vp_xlframe_ne", "fg": 2005, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1505}]}, {"id": "vp_xlframe_nw", "fg": 2005, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1505}]}, {"id": "vp_xlframe_se", "fg": 2005, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1505}]}, {"id": "vp_xlframe_sw", "fg": 2005, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1505}]}, {"id": "vp_xlframe_vertical", "fg": 2005, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1505}]}, {"id": "vp_xlframe_vertical_2", "fg": 2005, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1505}]}, {"id": "vp_xlhalfboard_horizontal", "fg": 1484, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_xlhalfboard_horizontal_2", "fg": 1484, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_xlhalfboard_ne", "fg": 1485, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_xlhalfboard_nw", "fg": 1487, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_xlhalfboard_se", "fg": 1486, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_xlhalfboard_sw", "fg": 1488, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_xlhalfboard_vertical", "fg": 1483, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "vp_xlhalfboard_vertical_2", "fg": 1483, "rotates": true, "multitile": true, "additional_tiles": [{"id": "broken", "fg": 1979}]}, {"id": "mon_amigara_horror", "fg": 1549, "rotates": false}, {"id": "mon_ant", "fg": 1626, "rotates": false}, {"id": "mon_ant_fungus", "fg": 1629, "rotates": false}, {"id": "mon_ant_larva", "fg": 1625, "rotates": false}, {"id": "mon_ant_queen", "fg": 1628, "rotates": false}, {"id": "mon_ant_soldier", "fg": 1627, "rotates": false}, {"id": "mon_bat", "fg": 1614, "rotates": false}, {"id": "mon_bear", "fg": 1620, "rotates": false}, {"id": "mon_beaver", "fg": 1694, "rotates": false}, {"id": "mon_beekeeper", "fg": 1655, "rotates": false}, {"id": "mon_bee", "fg": 1631, "rotates": false}, {"id": "mon_biollante", "fg": 1666, "rotates": false}, {"id": "mon_black_rat", "fg": 1695, "rotates": false}, {"id": "mon_blank", "fg": 1711, "rotates": false}, {"id": "mon_blob", "fg": 1688, "rotates": false}, {"id": "mon_blob_brain", "fg": 1560, "rotates": false}, {"id": "mon_blob_large", "fg": 1708, "rotates": false}, {"id": "mon_blob_small", "fg": 1689, "rotates": false}, {"id": "mon_blood_sacrifice", "fg": 1538, "rotates": false}, {"id": "mon_bobcat", "fg": 1696, "rotates": false}, {"id": "mon_boomer", "fg": 1647, "rotates": false}, {"id": "mon_boomer_fungus", "fg": 1648, "rotates": false}, {"id": "mon_boomer_huge", "fg": 1604, "rotates": false}, {"id": "mon_breather", "fg": 1713, "rotates": false}, {"id": "mon_breather_hub", "fg": 1712, "rotates": false}, {"id": "mon_broken_cyborg", "fg": 1699, "rotates": false}, {"id": "mon_cat", "fg": 1624, "rotates": false}, {"id": "mon_centipede", "fg": 1737, "rotates": false}, {"id": "mon_centipede_giant", "fg": 1678, "rotates": false}, {"id": "mon_charred_nightmare", "fg": 1564, "rotates": false}, {"id": "mon_chickenbot", "fg": 1595, "rotates": false}, {"id": "mon_chicken", "fg": 1693, "rotates": false}, {"id": "mon_chipmunk", "fg": 1694, "rotates": false}, {"id": "mon_chud", "fg": 1684, "rotates": false}, {"id": "mon_copbot", "fg": 1592, "rotates": false}, {"id": "mon_cougar", "fg": 1621, "rotates": false}, {"id": "mon_cow", "fg": 1540, "rotates": false}, {"id": "mon_coyote", "fg": 1619, "rotates": false}, {"id": "mon_coyote_wolf", "fg": 1619, "rotates": false}, {"id": "mon_crawler", "fg": 1686, "rotates": false}, {"id": "mon_creeper_hub", "fg": 1664, "rotates": false}, {"id": "mon_creeper_vine", "fg": 1665, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1719}, {"id": "corner", "fg": 1715}, {"id": "edge", "fg": 1716}, {"id": "t_connection", "fg": 1717}, {"id": "end_piece", "fg": 1718}, {"id": "unconnected", "fg": 1665}], "rotates": false}, {"id": "mon_crow", "fg": 1622, "rotates": false}, {"id": "mon_darkman", "fg": 1709, "rotates": false}, {"id": "mon_dark_wyrm", "fg": 1720, "rotates": false}, {"id": "mon_deer", "fg": 1616, "rotates": false}, {"id": "mon_deer_mouse", "fg": 1567, "rotates": false}, {"id": "mon_dementia", "fg": 1536, "rotates": false}, {"id": "mon_dermatik", "fg": 1674, "rotates": false}, {"id": "mon_dermatik_larva", "fg": 1675, "rotates": false}, {"id": "mon_dog", "fg": 1623, "rotates": false}, {"id": "mon_dog_skeleton", "fg": 1728, "rotates": false}, {"id": "mon_dog_thing", "fg": 1623, "rotates": false}, {"id": "mon_dog_zombie_cop", "fg": 1732, "rotates": false}, {"id": "mon_dog_zombie_rot", "fg": 1731, "rotates": false}, {"id": "mon_dragonfly", "fg": 1738, "rotates": false}, {"id": "mon_dragonfly_giant", "fg": 1679, "rotates": false}, {"id": "mon_duck", "fg": 1539, "rotates": false}, {"id": "mon_exploder", "fg": 1657, "rotates": false}, {"id": "mon_eyebot", "fg": 1581, "rotates": false}, {"id": "mon_fish_bass", "fg": 1558, "rotates": false}, {"id": "mon_fish_blinky", "fg": 1554, "rotates": false}, {"id": "mon_fish_bluegill", "fg": 1558, "rotates": false}, {"id": "mon_fish_bowfin", "fg": 1555, "rotates": false}, {"id": "mon_fish_bullhead", "fg": 1556, "rotates": false}, {"id": "mon_fish_carp", "fg": 1557, "rotates": false}, {"id": "mon_fish_eel", "fg": 1553, "rotates": false}, {"id": "mon_fish_lbass", "fg": 1556, "rotates": false}, {"id": "mon_fish_pbass", "fg": 1577, "rotates": false}, {"id": "mon_fish_perch", "fg": 1555, "rotates": false}, {"id": "mon_fish_pickerel", "fg": 1577, "rotates": false}, {"id": "mon_fish_pike", "fg": 1558, "rotates": false}, {"id": "mon_fish_salmon", "fg": 1555, "rotates": false}, {"id": "mon_fish_sbass", "fg": 1556, "rotates": false}, {"id": "mon_fish_sunfish", "fg": 1555, "rotates": false}, {"id": "mon_fish_trout", "fg": 1555, "rotates": false}, {"id": "mon_fish_whitefish", "fg": 1577, "rotates": false}, {"id": "mon_flaming_eye", "fg": 1703, "rotates": false}, {"id": "mon_flesh_angel", "fg": 1597, "rotates": false}, {"id": "mon_flying_polyp", "fg": 1705, "rotates": false}, {"id": "mon_fly", "fg": 1630, "rotates": false}, {"id": "mon_fox", "fg": 1569, "rotates": false}, {"id": "mon_fox_gray", "fg": 1568, "rotates": false}, {"id": "mon_fox_red", "fg": 1569, "rotates": false}, {"id": "mon_frog", "fg": 1738, "rotates": false}, {"id": "mon_frog_giant", "fg": 1677, "rotates": false}, {"id": "mon_fungaloid", "fg": 1669, "rotates": false}, {"id": "mon_fungaloid_dormant", "fg": 1669, "rotates": false}, {"id": "mon_fungaloid_queen", "fg": 1672, "rotates": false}, {"id": "mon_fungaloid_seeder", "fg": 1584, "rotates": false}, {"id": "mon_fungaloid_tower", "fg": 1585, "rotates": false}, {"id": "mon_fungaloid_young", "fg": 1670, "rotates": false}, {"id": "mon_fungal_blossom", "fg": 1588, "rotates": false}, {"id": "mon_fungal_fighter", "fg": 1724, "rotates": false}, {"id": "mon_fungal_hedgerow", "fg": 1586, "rotates": false}, {"id": "mon_fungal_tendril", "fg": 1587, "rotates": false}, {"id": "mon_fungal_wall", "fg": 1673, "rotates": false}, {"id": "mon_gelatin", "fg": 1708, "rotates": false}, {"id": "mon_generator", "fg": 1658, "rotates": false}, {"id": "mon_giant_crayfish", "fg": 1544, "rotates": false}, {"id": "mon_gozu", "fg": 1704, "rotates": false}, {"id": "mon_graboid", "fg": 1633, "rotates": false}, {"id": "mon_gracke", "fg": 1710, "rotates": false}, {"id": "mon_groundhog", "fg": 1691, "rotates": false}, {"id": "mon_halfworm", "fg": 1635, "rotates": false}, {"id": "mon_hallu_ant", "fg": 1626, "rotates": false}, {"id": "mon_hallu_bee", "fg": 1631, "rotates": false}, {"id": "mon_hallu_mom", "fg": 1659, "rotates": false}, {"id": "mon_hallu_multicooker", "fg": 1565, "rotates": false}, {"id": "mon_hallu_zom", "fg": 1636, "rotates": false}, {"id": "mon_hare", "fg": 1700, "rotates": false}, {"id": "mon_hazmatbot", "fg": 1591, "rotates": false}, {"id": "mon_headless_dog_thing", "fg": 1721, "rotates": false}, {"id": "mon_homunculus", "fg": 1537, "rotates": false}, {"id": "mon_horse", "fg": 1541, "rotates": false}, {"id": "mon_human_snail", "fg": 1550, "rotates": false}, {"id": "mon_hunting_horror", "fg": 1714, "rotates": false}, {"id": "mon_irradiated_wanderer_1", "fg": 1563, "rotates": false}, {"id": "mon_irradiated_wanderer_2", "fg": 1563, "rotates": false}, {"id": "mon_irradiated_wanderer_3", "fg": 1563, "rotates": false}, {"id": "mon_irradiated_wanderer_4", "fg": 1563, "rotates": false}, {"id": "mon_jabberwock", "fg": 1660, "rotates": false}, {"id": "mon_kreck", "fg": 1559, "rotates": false}, {"id": "mon_laserturret", "fg": 1548, "rotates": false}, {"id": "mon_lemming", "fg": 1692, "rotates": false}, {"id": "mon_manhack", "fg": 1582, "rotates": false}, {"id": "mon_mink", "fg": 1682, "rotates": false}, {"id": "mon_mi_go", "fg": 1552, "rotates": false}, {"id": "mon_molebot", "fg": 1593, "rotates": false}, {"id": "mon_moose", "fg": 1617, "rotates": false}, {"id": "mon_mosquito", "fg": 1737, "rotates": false}, {"id": "mon_mosquito_giant", "fg": 1680, "rotates": false}, {"id": "mon_muskrat", "fg": 1694, "rotates": false}, {"id": "mon_mutant_carp", "fg": 1578, "rotates": false}, {"id": "mon_mutant_salmon", "fg": 1578, "rotates": false}, {"id": "mon_one_eye", "fg": 1685, "rotates": false}, {"id": "mon_opossum", "fg": 1695, "rotates": false}, {"id": "mon_otter", "fg": 1701, "rotates": false}, {"id": "mon_pig", "fg": 1542, "rotates": false}, {"id": "mon_player_blob", "fg": 1562, "rotates": false}, {"id": "mon_rabbit", "fg": 1615, "rotates": false}, {"id": "mon_raccoon", "fg": 1695, "rotates": false}, {"id": "mon_rattlesnake", "fg": 1723, "rotates": false}, {"id": "mon_rat_king", "fg": 1681, "rotates": false}, {"id": "mon_riotbot", "fg": 1592, "rotates": false}, {"id": "mon_secubot", "fg": 1590, "rotates": false}, {"id": "mon_sewer_fish", "fg": 1687, "rotates": false}, {"id": "mon_sewer_rat", "fg": 1682, "rotates": false}, {"id": "mon_sewer_snake", "fg": 1683, "rotates": false}, {"id": "mon_shadow", "fg": 1709, "rotates": false}, {"id": "mon_shadow_snake", "fg": 1706, "rotates": false}, {"id": "mon_sheep", "fg": 1543, "rotates": false}, {"id": "mon_shia", "fg": 1545, "rotates": false}, {"id": "mon_shoggoth", "fg": 1546, "rotates": false}, {"id": "mon_shrew", "fg": 1567, "rotates": false}, {"id": "mon_skeleton", "fg": 1649, "rotates": false}, {"id": "mon_skitterbot", "fg": 1583, "rotates": false}, {"id": "mon_sludge_crawler", "fg": 1736, "rotates": false}, {"id": "mon_slug", "fg": 1737, "rotates": false}, {"id": "mon_slug_giant", "fg": 1676, "rotates": false}, {"id": "mon_spider_jumping", "fg": 1598, "rotates": false}, {"id": "mon_spider_jumping_giant", "fg": 1570, "rotates": false}, {"id": "mon_spider_trapdoor", "fg": 1600, "rotates": false}, {"id": "mon_spider_trapdoor_giant", "fg": 1576, "rotates": false}, {"id": "mon_spider_web", "fg": 1579, "rotates": false}, {"id": "mon_spider_web_s", "fg": 1601, "rotates": false}, {"id": "mon_spider_widow", "fg": 1599, "rotates": false}, {"id": "mon_spider_widow_giant", "fg": 1574, "rotates": false}, {"id": "mon_spider_widow_giant_s", "fg": 1599, "rotates": false}, {"id": "mon_spider_wolf", "fg": 1602, "rotates": false}, {"id": "mon_spider_wolf_giant", "fg": 1580, "rotates": false}, {"id": "mon_spore", "fg": 1671, "rotates": false}, {"id": "mon_squirrel", "fg": 1690, "rotates": false}, {"id": "mon_squirrel_red", "fg": 1691, "rotates": false}, {"id": "mon_tankbot", "fg": 1596, "rotates": false}, {"id": "mon_thing", "fg": 1722, "rotates": false}, {"id": "mon_triffid", "fg": 1661, "rotates": false}, {"id": "mon_triffid_heart", "fg": 1668, "rotates": false}, {"id": "mon_triffid_queen", "fg": 1663, "rotates": false}, {"id": "mon_triffid_young", "fg": 1662, "rotates": false}, {"id": "mon_tripod", "fg": 1594, "rotates": false}, {"id": "mon_turkey", "fg": 1735, "rotates": false}, {"id": "mon_turret", "fg": 1657, "rotates": false}, {"id": "mon_turret_bmg", "fg": 1561, "rotates": false}, {"id": "mon_turret_rifle", "fg": 1561, "rotates": false}, {"id": "mon_turret_searchlight", "fg": 1589, "rotates": false}, {"id": "mon_twisted_body", "fg": 1551, "rotates": false}, {"id": "mon_vinebeast", "fg": 1667, "rotates": false}, {"id": "mon_vortex", "fg": 1547, "rotates": false}, {"id": "mon_wasp", "fg": 1632, "rotates": false}, {"id": "mon_weasel", "fg": 1682, "rotates": false}, {"id": "mon_wolf", "fg": 1618, "rotates": false}, {"id": "mon_worm", "fg": 1634, "rotates": false}, {"id": "mon_yugg", "fg": 1707, "rotates": false}, {"id": "mon_zhark", "fg": 1578, "rotates": false}, {"id": "mon_zolf", "fg": 1740, "rotates": false}, {"id": "mon_zombear", "fg": 1566, "rotates": false}, {"id": "mon_zombie", "fg": 1636, "rotates": false}, {"id": "mon_zombie_acidic", "fg": 1606, "rotates": false}, {"id": "mon_zombie_armored", "fg": 1607, "rotates": false}, {"id": "mon_zombie_bio_op", "fg": 1698, "rotates": false}, {"id": "mon_zombie_brute", "fg": 1644, "rotates": false}, {"id": "mon_zombie_brute_shocker", "fg": 1572, "rotates": false}, {"id": "mon_zombie_child", "fg": 1656, "rotates": false}, {"id": "mon_zombie_cop", "fg": 1637, "rotates": false}, {"id": "mon_zombie_corrosive", "fg": 1605, "rotates": false}, {"id": "mon_zombie_crawler", "fg": 1727, "rotates": false}, {"id": "mon_zombie_dancer", "fg": 1575, "rotates": false}, {"id": "mon_zombie_dog", "fg": 1643, "rotates": false}, {"id": "mon_zombie_electric", "fg": 1640, "rotates": false}, {"id": "mon_zombie_fast", "fg": 1643, "rotates": false}, {"id": "mon_zombie_fat", "fg": 1725, "rotates": false}, {"id": "mon_zombie_fireman", "fg": 1733, "rotates": false}, {"id": "mon_zombie_fungus", "fg": 1646, "rotates": false}, {"id": "mon_zombie_gasbag", "fg": 1697, "rotates": false}, {"id": "mon_zombie_grabber", "fg": 1653, "rotates": false}, {"id": "mon_zombie_grappler", "fg": 1603, "rotates": false}, {"id": "mon_zombie_grenadier", "fg": 1608, "rotates": false}, {"id": "mon_zombie_grenadier_elite", "fg": 1609, "rotates": false}, {"id": "mon_zombie_hazmat", "fg": 1729, "rotates": false}, {"id": "mon_zombie_hollow", "fg": 1610, "rotates": false}, {"id": "mon_zombie_hulk", "fg": 1645, "rotates": false}, {"id": "mon_zombie_hunter", "fg": 1702, "rotates": false}, {"id": "mon_zombie_jackson", "fg": 1545, "rotates": false}, {"id": "mon_zombie_master", "fg": 1654, "rotates": false}, {"id": "mon_zombie_necro", "fg": 1650, "rotates": false}, {"id": "mon_zombie_pig", "fg": 1573, "rotates": false}, {"id": "mon_zombie_predator", "fg": 1611, "rotates": false}, {"id": "mon_zombie_rot", "fg": 1730, "rotates": false}, {"id": "mon_zombie_runner", "fg": 1612, "rotates": false}, {"id": "mon_zombie_scientist", "fg": 1651, "rotates": false}, {"id": "mon_zombie_shady", "fg": 1613, "rotates": false}, {"id": "mon_zombie_shrieker", "fg": 1638, "rotates": false}, {"id": "mon_zombie_smoker", "fg": 1641, "rotates": false}, {"id": "mon_zombie_soldier", "fg": 1652, "rotates": false}, {"id": "mon_zombie_spitter", "fg": 1639, "rotates": false}, {"id": "mon_zombie_survivor", "fg": 1734, "rotates": false}, {"id": "mon_zombie_swimmer", "fg": 1642, "rotates": false}, {"id": "mon_zombie_technician", "fg": 1571, "rotates": false}, {"id": "mon_zombie_tough", "fg": 1726, "rotates": false}, {"id": "mon_zoose", "fg": 1739, "rotates": false}, {"id": "mon_zougar", "fg": 1741, "rotates": false}, {"id": "mon_zombie_biter", "fg": 1742, "rotates": false}, {"id": "mon_zombie_brainless", "fg": 1743, "rotates": false}, {"id": "mon_zombie_brute_ninja", "fg": 1744, "rotates": false}, {"id": "mon_zombie_ears", "fg": 1745, "rotates": false}, {"id": "mon_zombie_mancroc", "fg": 1746, "rotates": false}, {"id": "mon_zombie_screecher", "fg": 1747, "rotates": false}, {"id": "sandwich_t", "fg": 1750, "rotates": false, "multitile": false}, {"id": "t_ash", "bg": 1976, "rotates": false}, {"id": "t_atm", "fg": 2059, "rotates": false}, {"id": "t_backboard", "fg": 1981, "rotates": false}, {"id": "t_barndoor", "fg": 2082, "rotates": false}, {"id": "t_brick_wall", "fg": 1877, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1875}, {"id": "corner", "fg": 1876}, {"id": "edge", "fg": 1877}, {"id": "t_connection", "fg": 1878}, {"id": "end_piece", "fg": 1877}, {"id": "unconnected", "fg": 1877}], "rotates": false}, {"id": "t_brick_wall_halfway", "fg": 1879, "rotates": false}, {"id": "t_brick_wall_line", "fg": 1877, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1875}, {"id": "corner", "fg": 1876}, {"id": "edge", "fg": 1877}, {"id": "t_connection", "fg": 1878}, {"id": "end_piece", "fg": 1877}, {"id": "unconnected", "fg": 1877}], "rotates": false}, {"id": "t_bridge", "bg": 1941, "rotates": false}, {"id": "t_card_military", "fg": 1983, "rotates": false}, {"id": "t_card_reader_broken", "fg": 2083, "rotates": false}, {"id": "t_card_science", "fg": 1983, "rotates": false}, {"id": "t_carpet_green", "bg": 1948, "rotates": false}, {"id": "t_carpet_purple", "bg": 1775, "rotates": false}, {"id": "t_carpet_red", "bg": 1947, "rotates": false}, {"id": "t_carpet_yellow", "bg": 1774, "rotates": false}, {"id": "t_centrifuge", "fg": 1934, "rotates": false}, {"id": "t_chainfence_h", "fg": 2089, "multitile": true, "additional_tiles": [{"id": "center", "fg": 2011}, {"id": "corner", "fg": 1971}, {"id": "edge", "fg": 2089}, {"id": "t_connection", "fg": 1982}, {"id": "end_piece", "fg": 2017}, {"id": "unconnected", "fg": 2089}], "rotates": false}, {"id": "t_chainfence_posts", "fg": 1980, "bg": 1924, "rotates": false}, {"id": "t_chainfence_v", "fg": 2089, "multitile": true, "additional_tiles": [{"id": "center", "fg": 2011}, {"id": "corner", "fg": 1971}, {"id": "edge", "fg": 2089}, {"id": "t_connection", "fg": 1982}, {"id": "end_piece", "fg": 2017}, {"id": "unconnected", "fg": 2089}], "rotates": false}, {"id": "t_chaingate_c", "fg": 2090, "bg": 1924, "rotates": false}, {"id": "t_chaingate_l", "fg": 2090, "bg": 1924, "rotates": false}, {"id": "t_chaingate_o", "fg": 1760, "bg": 1924, "rotates": false}, {"id": "t_claymound", "bg": 1824, "rotates": false}, {"id": "t_column", "fg": 2002, "rotates": false}, {"id": "t_concrete_h", "fg": 1970, "bg": 1924, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1970}, {"id": "corner", "fg": 1968}, {"id": "edge", "fg": 1970}, {"id": "t_connection", "fg": 1969}, {"id": "end_piece", "fg": 1970}, {"id": "unconnected", "fg": 1970}], "rotates": false}, {"id": ["t_concrete", "t_concrete_floor"], "bg": 1752, "rotates": false}, {"id": "t_concrete_v", "fg": 1970, "bg": 1924, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1970}, {"id": "corner", "fg": 1968}, {"id": "edge", "fg": 1970}, {"id": "t_connection", "fg": 1969}, {"id": "end_piece", "fg": 1970}, {"id": "unconnected", "fg": 1970}], "rotates": false}, {"id": ["t_concrete_wall", "t_rock_smooth"], "fg": 1970, "bg": 1924, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1970}, {"id": "corner", "fg": 1968}, {"id": "edge", "fg": 1970}, {"id": "t_connection", "fg": 1969}, {"id": "end_piece", "fg": 1970}, {"id": "unconnected", "fg": 1970}], "rotates": false}, {"id": "t_console", "fg": 1813, "bg": 2058, "rotates": false}, {"id": "t_console_broken", "fg": 1814, "bg": 2058, "rotates": false}, {"id": "t_conveyor", "fg": 1884, "bg": 2058, "rotates": false}, {"id": "t_covered_well", "fg": 1823, "rotates": false}, {"id": "t_current_trans", "fg": 1837, "rotates": false, "multitile": false}, {"id": "t_curtains", "fg": 2075, "rotates": false}, {"id": "t_cvdbody", "fg": 1784, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1857}, {"id": "corner", "fg": 1858}, {"id": "edge", "fg": 1859}, {"id": "t_connection", "fg": 1860}, {"id": "end_piece", "fg": 1861}, {"id": "unconnected", "fg": 1784}], "rotates": false}, {"id": "t_cvdmachine", "fg": 1785, "rotates": false}, {"id": "t_diesel_pump", "fg": 1862, "rotates": false}, {"id": "t_diesel_pump_smashed", "fg": 1863, "rotates": false}, {"id": "t_dirtfloor", "bg": 1924, "rotates": false}, {"id": "t_dirtmound", "bg": 1824, "rotates": false}, {"id": "t_dirt", "bg": 1924, "rotates": false}, {"id": "t_dock", "fg": 2003, "rotates": false}, {"id": "t_door_bar_c", "fg": 2007, "rotates": false}, {"id": "t_door_bar_locked", "fg": 2009, "rotates": false}, {"id": "t_door_bar_o", "fg": 2008, "rotates": false}, {"id": "t_door_boarded", "fg": 2067, "rotates": false}, {"id": "t_door_boarded_damaged", "fg": 2066, "rotates": false}, {"id": "t_door_boarded_damaged_peep", "fg": 2066, "rotates": false}, {"id": "t_door_boarded_peep", "fg": 2067, "rotates": false}, {"id": "t_door_b", "fg": 2063, "bg": 2058, "rotates": false}, {"id": "t_door_b_peep", "fg": 2063, "bg": 2058, "rotates": false}, {"id": "t_door_curtain_c", "fg": 1893, "bg": 2058, "rotates": false}, {"id": "t_door_curtain_o", "fg": 1894, "bg": 2062, "rotates": false}, {"id": "t_door_c", "fg": 2061, "bg": 2058, "rotates": false}, {"id": "t_door_c_peep", "fg": 1849, "bg": 2058, "rotates": false}, {"id": "t_door_frame", "fg": 2062, "rotates": false}, {"id": "t_door_glass_c", "fg": 1754, "bg": 2058, "rotates": true}, {"id": "t_door_glass_o", "fg": 1755, "bg": 2058, "rotates": true}, {"id": "t_door_locked", "fg": 2064, "bg": 2058, "rotates": false}, {"id": "t_door_locked_alarm", "fg": 2064, "bg": 2058, "rotates": false}, {"id": "t_door_locked_interior", "fg": 2064, "bg": 2058, "rotates": false}, {"id": "t_door_locked_peep", "fg": 1850, "bg": 2058, "rotates": false}, {"id": "t_door_makeshift_c", "fg": 1892, "bg": 2058, "rotates": false}, {"id": "t_door_makeshift_o", "fg": 2062, "bg": 2058, "rotates": false}, {"id": "t_door_metal_c", "fg": 2068, "rotates": false}, {"id": "t_door_metal_c_peep", "fg": 1896, "rotates": false}, {"id": "t_door_metal_locked", "fg": 2010, "rotates": false}, {"id": "t_door_metal_o", "fg": 2069, "rotates": false}, {"id": "t_door_metal_o_peep", "fg": 2069, "rotates": false}, {"id": "t_door_metal_pickable", "fg": 2010, "rotates": false}, {"id": "t_door_o", "fg": 2062, "bg": 2058, "rotates": false}, {"id": "t_door_o_peep", "fg": 2062, "bg": 2058, "rotates": false}, {"id": "t_elevator", "fg": 1999, "rotates": false}, {"id": "t_elevator_control", "fg": 2000, "rotates": false}, {"id": "t_elevator_control_off", "fg": 2001, "rotates": false}, {"id": "t_fault", "fg": 1788, "rotates": false}, {"id": "t_fencegate_c", "fg": 1756, "bg": 1924, "rotates": false}, {"id": "t_fencegate_o", "fg": 1757, "bg": 1924, "rotates": false}, {"id": "t_fence_barbed", "fg": 1972, "multitile": true, "additional_tiles": [{"id": "center", "fg": 2011}, {"id": "corner", "fg": 2012}, {"id": "edge", "fg": 1972}, {"id": "t_connection", "fg": 2013}, {"id": "end_piece", "fg": 2016}, {"id": "unconnected", "fg": 1972}], "rotates": false}, {"id": "t_fence_h", "fg": 2088, "bg": 1924, "rotates": false}, {"id": "t_fence_post", "fg": 1973, "rotates": false}, {"id": "t_fence_rope", "fg": 2046, "multitile": true, "additional_tiles": [{"id": "center", "fg": 2044}, {"id": "corner", "fg": 2045}, {"id": "edge", "fg": 2046}, {"id": "t_connection", "fg": 2047}, {"id": "end_piece", "fg": 2048}, {"id": "unconnected", "fg": 2046}], "rotates": false}, {"id": "t_fence_v", "fg": 338, "bg": 1924, "rotates": false}, {"id": "t_fence_wire", "fg": 2089, "multitile": true, "additional_tiles": [{"id": "center", "fg": 2011}, {"id": "corner", "fg": 1971}, {"id": "edge", "fg": 2089}, {"id": "t_connection", "fg": 1982}, {"id": "end_piece", "fg": 2017}, {"id": "unconnected", "fg": 2089}], "rotates": false}, {"id": "t_flat_roof", "bg": 1752, "rotates": false}, {"id": "t_floor", "bg": 2058, "rotates": false}, {"id": "t_floor_blue", "bg": 1949, "rotates": false}, {"id": "t_floor_green", "bg": 1948, "rotates": false}, {"id": "t_floor_red", "bg": 1947, "rotates": false}, {"id": "t_floor_waxed", "bg": 1773, "rotates": false}, {"id": "t_floor_wax", "bg": 1786, "rotates": false}, {"id": "t_fungus", "bg": 1749, "rotates": false}, {"id": "t_fungus_floor_in", "bg": 1984, "rotates": false}, {"id": "t_fungus_floor_out", "bg": 1986, "rotates": false}, {"id": "t_fungus_floor_sup", "fg": 1985, "rotates": false}, {"id": "t_fungus_mound", "fg": 1990, "rotates": false}, {"id": "t_fungus_wall", "fg": 1987, "rotates": false}, {"id": "t_fungus_wall_h", "fg": 1989, "rotates": false}, {"id": "t_fungus_wall_v", "fg": 1988, "rotates": false}, {"id": "t_gas_pump", "fg": 1942, "bg": 2004, "rotates": false}, {"id": "t_gas_pump_a", "fg": 1865, "rotates": false}, {"id": "t_gas_pump_smashed", "fg": 1943, "bg": 2004, "rotates": false}, {"id": "t_gas_tank", "fg": 1864, "rotates": false}, {"id": "t_gates_control_concrete", "fg": 1818, "rotates": false}, {"id": "t_gates_mech_control", "fg": 1818, "rotates": false}, {"id": "t_generator_broken", "fg": 1998, "multitile": true, "additional_tiles": [{"id": "corner", "fg": 1998, "bg": []}, {"id": "t_connection", "fg": 2057, "bg": []}], "rotates": false}, {"id": "t_grass", "fg": 2049, "rotates": false}, {"id": "t_grass_white", "fg": 1891, "bg": 1516, "rotates": false}, {"id": "t_grate", "fg": 2093, "rotates": false}, {"id": "t_guardrail_bg_dp", "fg": 1959, "rotates": true}, {"id": "t_hole", "bg": [], "rotates": false}, {"id": "t_improvised_shelter", "fg": 1839, "rotates": false, "multitile": false}, {"id": "t_ind_drill", "fg": 1919, "rotates": false, "multitile": false}, {"id": "t_ind_furnace", "fg": 1918, "rotates": false, "multitile": false}, {"id": "t_ind_press", "fg": 1920, "rotates": false}, {"id": "t_ladder_down", "fg": 1758, "rotates": false}, {"id": "t_ladder_up", "fg": 2084, "rotates": false}, {"id": "t_lava", "fg": 1978, "rotates": false}, {"id": "t_lgtn_arrest", "fg": 1882, "rotates": false, "multitile": false}, {"id": "t_linoleum_gray", "bg": 1809, "rotates": false}, {"id": "t_linoleum_white", "bg": 1792, "rotates": false}, {"id": "t_little_column", "fg": 2002, "rotates": false}, {"id": "t_machinery_electronic", "fg": 1921, "rotates": false}, {"id": "t_machinery_heavy", "fg": 1925, "rotates": false}, {"id": "t_machinery_light", "fg": 1922, "rotates": false}, {"id": "t_machinery_old", "fg": 1926, "rotates": false}, {"id": "t_manhole", "fg": 1816, "rotates": false}, {"id": "t_manhole_cover", "fg": 1815, "bg": 2004, "rotates": false}, {"id": "t_marloss", "fg": 1748, "rotates": false}, {"id": "t_marloss_tree", "fg": 1856, "rotates": false}, {"id": "t_mdoor_frame", "fg": 2069, "rotates": false}, {"id": "t_metal", "bg": 1931, "rotates": false}, {"id": "t_metal_floor", "bg": 2060, "rotates": false}, {"id": "t_missile", "fg": 1776, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1776}, {"id": "corner", "fg": 1777}, {"id": "edge", "fg": 1776}, {"id": "t_connection", "fg": 1778}, {"id": "end_piece", "fg": 1776}, {"id": "unconnected", "fg": 1776}], "rotates": false}, {"id": "t_missile_exploded", "fg": 1979, "rotates": false}, {"id": "t_monkey_bars", "fg": 1950, "bg": [], "multitile": true, "additional_tiles": [{"id": "center", "fg": 1950}, {"id": "corner", "fg": 1951}, {"id": "t_connection", "fg": 1952}], "rotates": false}, {"id": "t_m_frame", "fg": 1895, "rotates": false}, {"id": "t_oil_circ_brkr_l", "fg": 1834, "rotates": false, "multitile": false}, {"id": "t_oil_circ_brkr_s", "fg": 1835, "rotates": false, "multitile": false}, {"id": "t_open_air", "bg": 1821, "rotates": false}, {"id": "t_ov_reb_cage", "bg": 1931, "rotates": false}, {"id": "t_ov_smreb_cage", "bg": 1931, "rotates": false}, {"id": "t_palisade", "fg": 2081, "bg": 1924, "rotates": false}, {"id": "t_palisade_gate", "fg": 1756, "bg": 1924, "rotates": false}, {"id": "t_palisade_gate_o", "fg": 1757, "bg": 1924, "rotates": false}, {"id": "t_palisade_pulley", "fg": 2082, "rotates": false}, {"id": "t_paper", "fg": 2092, "rotates": false}, {"id": "t_pavement", "bg": 2004, "rotates": false}, {"id": "t_pavement_bg_dp", "bg": 2004, "rotates": false}, {"id": "t_pavement_y", "fg": 1928, "bg": 2004, "rotates": false}, {"id": "t_pavement_y_bg_dp", "fg": 1928, "bg": 2004, "rotates": false}, {"id": "t_pedestal_temple", "fg": 2097, "rotates": false}, {"id": "t_pedestal_wyrm", "fg": 2096, "rotates": false}, {"id": "t_pit", "fg": 1880, "multitile": true, "additional_tiles": [{"id": "center", "fg": 2022}, {"id": "corner", "fg": 2023}, {"id": "edge", "fg": 2024}, {"id": "t_connection", "fg": 2025}, {"id": "end_piece", "fg": 2026}, {"id": "unconnected", "fg": 1880}], "rotates": false}, {"id": "t_pit_corpsed", "fg": 2033, "multitile": true, "additional_tiles": [{"id": "center", "fg": 2028}, {"id": "corner", "fg": 2029}, {"id": "edge", "fg": 2030}, {"id": "t_connection", "fg": 2031}, {"id": "end_piece", "fg": 2032}, {"id": "unconnected", "fg": 2033}], "rotates": false}, {"id": "t_pit_covered", "bg": 1927, "rotates": false}, {"id": "t_pit_glass", "fg": 1848, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1843}, {"id": "corner", "fg": 1844}, {"id": "edge", "fg": 1845}, {"id": "t_connection", "fg": 1846}, {"id": "end_piece", "fg": 1847}, {"id": "unconnected", "fg": 1848}], "rotates": false}, {"id": "t_pit_glass_covered", "bg": 1927, "rotates": false}, {"id": "t_pit_shallow", "fg": 1842, "multitile": true, "additional_tiles": [{"id": "center", "fg": 2039}, {"id": "corner", "fg": 2040}, {"id": "edge", "fg": 2041}, {"id": "t_connection", "fg": 2042}, {"id": "end_piece", "fg": 2043}, {"id": "unconnected", "fg": 1842}], "rotates": false}, {"id": "t_pit_spiked", "fg": 1923, "multitile": true, "additional_tiles": [{"id": "center", "fg": 2034}, {"id": "corner", "fg": 2035}, {"id": "edge", "fg": 2036}, {"id": "t_connection", "fg": 2037}, {"id": "end_piece", "fg": 2038}, {"id": "unconnected", "fg": 1923}], "rotates": false}, {"id": "t_pit_spiked_covered", "bg": 1927, "rotates": false}, {"id": "t_plut_generator", "fg": 1838, "rotates": false, "multitile": false}, {"id": "t_pontoon_dp", "fg": 2027, "rotates": true}, {"id": "t_portcullis", "fg": 1789, "rotates": false}, {"id": "t_potential_trans", "fg": 1835, "rotates": false, "multitile": false}, {"id": "t_radio_controls", "fg": 1819, "rotates": false}, {"id": "t_radio_tower", "fg": 1817, "bg": 2004, "rotates": false}, {"id": "t_railing_h", "fg": 1960, "rotates": false}, {"id": "t_railing_v", "fg": 1959, "rotates": false}, {"id": "t_rdoor_boarded", "fg": 1841, "rotates": false}, {"id": "t_rdoor_boarded_damaged", "fg": 1840, "rotates": false}, {"id": "t_rdoor_b", "fg": 1769, "rotates": false}, {"id": "t_rdoor_c", "fg": 1767, "rotates": false}, {"id": "t_rdoor_o", "fg": 1768, "rotates": false}, {"id": "t_reb_cage", "fg": 2087, "multitile": true, "additional_tiles": [{"id": "center", "fg": 2014}, {"id": "corner", "fg": 2006}, {"id": "edge", "fg": 2005}, {"id": "t_connection", "fg": 2015}, {"id": "end_piece", "fg": 2005}, {"id": "unconnected", "fg": 2087}], "rotates": false}, {"id": "t_recycler", "fg": 1812, "rotates": false}, {"id": "t_reinforced_glass_h", "fg": 1967, "bg": 2058, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1967}, {"id": "corner", "fg": 1965}, {"id": "edge", "fg": 1967}, {"id": "t_connection", "fg": 1966}, {"id": "end_piece", "fg": 1967}, {"id": "unconnected", "fg": 1967}], "rotates": false}, {"id": "t_reinforced_glass_shutter", "fg": 1911, "bg": 1924, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1910}, {"id": "corner", "fg": 1909}, {"id": "edge", "fg": 1911}, {"id": "t_connection", "fg": 1910}, {"id": "end_piece", "fg": 1911}, {"id": "unconnected", "fg": 1911}], "rotates": false}, {"id": ["t_reinforced_glass", "t_reinforced_glass_shutter_open"], "fg": 1967, "bg": 2058, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1967}, {"id": "corner", "fg": 1965}, {"id": "edge", "fg": 1967}, {"id": "t_connection", "fg": 1966}, {"id": "end_piece", "fg": 1967}, {"id": "unconnected", "fg": 1967}], "rotates": false}, {"id": "t_reinforced_glass_v", "fg": 1967, "bg": 2058, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1967}, {"id": "corner", "fg": 1965}, {"id": "edge", "fg": 1967}, {"id": "t_connection", "fg": 1966}, {"id": "end_piece", "fg": 1967}, {"id": "unconnected", "fg": 1967}], "rotates": false}, {"id": "t_rock", "fg": 1810, "rotates": false}, {"id": "t_rock_blue", "fg": 1946, "rotates": false}, {"id": "t_rock_floor", "bg": 1930, "rotates": false}, {"id": "t_rock_green", "fg": 1945, "rotates": false}, {"id": "t_rock_red", "fg": 1944, "rotates": false}, {"id": "t_rock_wall", "fg": 1929, "multitile": true, "additional_tiles": [{"id": "center", "fg": 2054}, {"id": "corner", "fg": 2055}, {"id": "edge", "fg": 1929}, {"id": "t_connection", "fg": 2056}, {"id": "end_piece", "fg": 1929}, {"id": "unconnected", "fg": 1929}], "rotates": false}, {"id": "t_rock_wall_half", "fg": 1811, "rotates": false}, {"id": "t_root_wall", "fg": 2046, "multitile": true, "additional_tiles": [{"id": "center", "fg": 2050}, {"id": "corner", "fg": 2051}, {"id": "edge", "fg": 2046}, {"id": "t_connection", "fg": 2052}, {"id": "end_piece", "fg": 2053}, {"id": "unconnected", "fg": 2046}], "rotates": false}, {"id": "t_rope_up", "fg": 1790, "rotates": false}, {"id": "t_rubble", "bg": 1940, "rotates": false}, {"id": "t_sai_box", "fg": 329, "rotates": false}, {"id": "t_sai_box_damaged", "fg": 330, "rotates": false}, {"id": "t_sandbox", "fg": 1833, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1829}, {"id": "corner", "fg": 1932}, {"id": "edge", "fg": 1830}, {"id": "t_connection", "fg": 1831}, {"id": "end_piece", "fg": 1832}, {"id": "unconnected", "fg": 1833}], "rotates": false}, {"id": "t_sandmound", "bg": 1824, "rotates": false}, {"id": "t_sand", "bg": 1935, "rotates": false}, {"id": "t_sconc_wall", "fg": 1929, "multitile": true, "additional_tiles": [{"id": "center", "fg": 2054}, {"id": "corner", "fg": 2055}, {"id": "edge", "fg": 1929}, {"id": "t_connection", "fg": 2056}, {"id": "end_piece", "fg": 1929}, {"id": "unconnected", "fg": 1929}], "rotates": false}, {"id": "t_sconc_wall_halfway", "fg": 1811, "rotates": false}, {"id": "t_scrap_floor", "bg": 2060, "rotates": false}, {"id": "t_scrap_wall", "fg": 1964, "bg": 1924, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1964}, {"id": "corner", "fg": 1962}, {"id": "edge", "fg": 1964}, {"id": "t_connection", "fg": 1963}, {"id": "end_piece", "fg": 1964}, {"id": "unconnected", "fg": 1964}], "rotates": false}, {"id": "t_searth_test", "bg": 1791, "rotates": false}, {"id": "t_sewage", "bg": 2094, "rotates": false}, {"id": ["t_sewage_pipe", "t_ind_pipe"], "fg": 1939, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1993}, {"id": "corner", "fg": 1994}, {"id": "edge", "fg": 1995}, {"id": "t_connection", "fg": 1996}, {"id": "end_piece", "fg": 1997}, {"id": "unconnected", "fg": 1939}], "rotates": false}, {"id": "t_sewage_pump", "fg": 1938, "rotates": false}, {"id": "t_shrub", "fg": 2086, "bg": 1924, "rotates": false}, {"id": "t_shrub_blueberry", "fg": 2065, "bg": 1935, "rotates": false}, {"id": "t_shrub_blueberry_harvested", "fg": 1883, "bg": 1935, "rotates": false}, {"id": "t_shrub_blueberry_harvested", "fg": 1851, "bg": 1935, "rotates": false}, {"id": "t_shrub_fungal", "fg": 1991, "rotates": false}, {"id": "t_shrub_strawberry", "fg": 2076, "bg": 1935, "rotates": false}, {"id": "t_shrub_strawberry_harvested", "fg": 1883, "bg": 1935, "rotates": false}, {"id": "t_shrub_strawberry_harvested", "fg": 1852, "bg": 1935, "rotates": false}, {"id": "t_sidewalk", "bg": 1961, "rotates": false}, {"id": "t_sidewalk_bg_dp", "bg": 1961, "rotates": false}, {"id": "t_skylight", "bg": 1792, "rotates": false}, {"id": "t_slide", "fg": 1954, "bg": [], "multitile": true, "additional_tiles": [{"id": "edge", "fg": 1954}, {"id": "end_piece", "fg": 1953}], "rotates": false}, {"id": "t_slime", "fg": 2094, "rotates": false}, {"id": "t_slope_down", "fg": 2099, "rotates": false}, {"id": "t_slope_up", "fg": 2095, "rotates": false}, {"id": "t_slot_machine", "fg": 1793, "rotates": false}, {"id": "t_stairs_down", "fg": 1763, "rotates": false}, {"id": "t_stairs_up", "fg": 1762, "rotates": false}, {"id": "t_station_disc", "fg": 1836, "rotates": false, "multitile": false}, {"id": ["t_stone_wall_line", "t_rock_wall"], "fg": 1964, "bg": 1924, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1908}, {"id": "corner", "fg": 1904}, {"id": "edge", "fg": 1906}, {"id": "t_connection", "fg": 1905}, {"id": "end_piece", "fg": 1907}, {"id": "unconnected", "fg": 1903}], "rotates": false}, {"id": "t_strconc_floor", "bg": 1752, "rotates": false}, {"id": "t_strconc_floor_halfway", "fg": 1809, "rotates": false}, {"id": "t_strconc_wall", "fg": 1929, "multitile": true, "additional_tiles": [{"id": "center", "fg": 2054}, {"id": "corner", "fg": 2055}, {"id": "edge", "fg": 1929}, {"id": "t_connection", "fg": 2056}, {"id": "end_piece", "fg": 1929}, {"id": "unconnected", "fg": 1929}], "rotates": false}, {"id": "t_strconc_wall_halfway", "fg": 1811, "rotates": false}, {"id": "t_support_l", "fg": 2002, "rotates": false}, {"id": "t_support_s", "fg": 1980, "bg": 1924, "rotates": false}, {"id": "t_swater_dp", "fg": 1958, "rotates": false}, {"id": "t_swater_sh", "fg": 1957, "rotates": false}, {"id": "t_switchgear_l", "fg": 1881, "rotates": false}, {"id": "t_switchgear_s", "fg": 1881, "rotates": false}, {"id": "t_switch_even", "fg": 1766, "rotates": false}, {"id": "t_switch_gb", "fg": 1764, "rotates": false}, {"id": "t_switch_rb", "fg": 1765, "rotates": false}, {"id": "t_switch_rg", "fg": 2098, "rotates": false}, {"id": "t_thconc_floor", "bg": 1752, "rotates": false}, {"id": "t_tree", "fg": 1759, "bg": 1924, "rotates": false}, {"id": "t_tree_apple", "fg": 1825, "bg": 1924, "rotates": false}, {"id": "t_tree_apple_harvested", "fg": 1853, "bg": 1924, "rotates": false}, {"id": "t_tree_apple_season_spring", "fg": 1855, "bg": 1924, "rotates": false}, {"id": "t_tree_apple_season_summer", "fg": 1853, "bg": 1924, "rotates": false}, {"id": "t_tree_apple_season_winter", "fg": 1870, "bg": 1924, "rotates": false}, {"id": "t_tree_apricot", "fg": 1826, "bg": 1924, "rotates": false}, {"id": "t_tree_apricot_harvested", "fg": 1854, "bg": 1924, "rotates": false}, {"id": "t_tree_apricot_season_autumn", "fg": 1869, "bg": 1924, "rotates": false}, {"id": "t_tree_apricot_season_spring", "fg": 1855, "bg": 1924, "rotates": false}, {"id": "t_tree_apricot_season_winter", "fg": 1870, "bg": 1924, "rotates": false}, {"id": "t_tree_birch", "fg": 1913, "rotates": false, "multitile": false}, {"id": "t_tree_birch_harvested", "fg": 1913, "rotates": false, "multitile": false}, {"id": "t_tree_blackjack", "fg": 1866, "bg": 1924, "rotates": false}, {"id": "t_tree_blackjack_season_autumn", "fg": 1867, "bg": 1924, "rotates": false}, {"id": "t_tree_blackjack_season_spring", "fg": 1874, "bg": 1924, "rotates": false}, {"id": "t_tree_blackjack_season_winter", "fg": 1868, "bg": 1924, "rotates": false}, {"id": "t_tree_cherry", "fg": 1770, "bg": 1924, "rotates": false}, {"id": "t_tree_cherry_harvested", "fg": 1855, "bg": 1924, "rotates": false}, {"id": "t_tree_cherry_season_autumn", "fg": 1869, "bg": 1924, "rotates": false}, {"id": "t_tree_cherry_season_spring", "fg": 1855, "bg": 1924, "rotates": false}, {"id": "t_tree_cherry_season_winter", "fg": 1870, "bg": 1924, "rotates": false}, {"id": "t_tree_deadpine", "fg": 1828, "bg": 1924, "rotates": false}, {"id": "t_tree_dead", "fg": 1912, "rotates": false, "multitile": false}, {"id": "t_tree_fungal", "fg": 1751, "rotates": false}, {"id": "t_tree_fungal_young", "fg": 1992, "rotates": false}, {"id": "t_tree_hickory", "fg": 1915, "rotates": false, "multitile": false}, {"id": "t_tree_hickory_dead", "fg": 1917, "rotates": false, "multitile": false}, {"id": "t_tree_hickory_harvested", "fg": 1915, "rotates": false, "multitile": false}, {"id": "t_tree_maple", "fg": 1916, "rotates": false, "multitile": false}, {"id": "t_tree_maple_tapped", "fg": 1916, "rotates": false, "multitile": false}, {"id": "t_tree_peach", "fg": 1826, "bg": 1924, "rotates": false}, {"id": "t_tree_peach_harvested", "fg": 1854, "bg": 1924, "rotates": false}, {"id": "t_tree_peach_season_autumn", "fg": 1869, "bg": 1924, "rotates": false}, {"id": "t_tree_peach_season_spring", "fg": 1855, "bg": 1924, "rotates": false}, {"id": "t_tree_peach_season_winter", "fg": 1870, "bg": 1924, "rotates": false}, {"id": "t_tree_pear", "fg": 1825, "bg": 1924, "rotates": false}, {"id": "t_tree_pear_harvested", "fg": 1853, "bg": 1924, "rotates": false}, {"id": "t_tree_pear_season_spring", "fg": 1855, "bg": 1924, "rotates": false}, {"id": "t_tree_pear_season_summer", "fg": 1853, "bg": 1924, "rotates": false}, {"id": "t_tree_pear_season_winter", "fg": 1870, "bg": 1924, "rotates": false}, {"id": "t_tree_pine", "fg": 1827, "bg": 1924, "rotates": false}, {"id": "t_tree_plum", "fg": 1770, "bg": 1924, "rotates": false}, {"id": "t_tree_plum_harvested", "fg": 1855, "bg": 1924, "rotates": false}, {"id": "t_tree_plum_season_autumn", "fg": 1869, "bg": 1924, "rotates": false}, {"id": "t_tree_plum_season_spring", "fg": 1855, "bg": 1924, "rotates": false}, {"id": "t_tree_plum_season_winter", "fg": 1870, "bg": 1924, "rotates": false}, {"id": "t_tree_season_autumn", "fg": 1869, "bg": 1924, "rotates": false}, {"id": "t_tree_season_spring", "fg": 1853, "bg": 1924, "rotates": false}, {"id": "t_tree_season_winter", "fg": 1870, "bg": 1924, "rotates": false}, {"id": "t_tree_willow", "fg": 1914, "rotates": false, "multitile": false}, {"id": "t_tree_willow_harvested", "fg": 1914, "rotates": false, "multitile": false}, {"id": "t_tree_young", "fg": 2100, "bg": 1924, "rotates": false}, {"id": "t_tree_young_season_autumn", "fg": 1872, "bg": 1924, "rotates": false}, {"id": "t_tree_young_season_spring", "fg": 1871, "bg": 1924, "rotates": false}, {"id": "t_tree_young_season_winter", "fg": 1873, "bg": 1924, "rotates": false}, {"id": "t_trunk", "fg": 1936, "rotates": false}, {"id": "t_underbrush", "fg": 1937, "bg": 1924, "rotates": false}, {"id": "t_underbrush_harvested_autumn", "fg": 1883, "bg": 1924, "rotates": false}, {"id": "t_underbrush_harvested_spring", "fg": 1883, "bg": 1924, "rotates": false}, {"id": "t_underbrush_harvested_summer", "fg": 1883, "bg": 1924, "rotates": false}, {"id": "t_underbrush_harvested_winter", "fg": 1883, "bg": 1924, "rotates": false}, {"id": "t_utility_light", "bg": 1822, "rotates": false}, {"id": "t_vat", "fg": 1933, "rotates": false}, {"id": "t_wall", "fg": 2085, "bg": 1935, "multitile": true, "additional_tiles": [{"id": "center", "fg": 2085}, {"id": "corner", "fg": 1955}, {"id": "edge", "fg": 2085}, {"id": "t_connection", "fg": 1956}, {"id": "end_piece", "fg": 2085}, {"id": "unconnected", "fg": 2085}], "rotates": false}, {"id": "t_wall_b", "fg": 1797, "bg": 1935, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1797}, {"id": "corner", "fg": 1798}, {"id": "edge", "fg": 1797}, {"id": "t_connection", "fg": 1799}, {"id": "end_piece", "fg": 1797}, {"id": "unconnected", "fg": 1797}], "rotates": false}, {"id": "t_wall_glass", "fg": 1974, "bg": [], "multitile": true, "additional_tiles": [{"id": "center", "fg": 1974}, {"id": "corner", "fg": 1975}, {"id": "edge", "fg": 1974}, {"id": "t_connection", "fg": 1753}, {"id": "end_piece", "fg": 1974}, {"id": "unconnected", "fg": 1974}], "rotates": false}, {"id": "t_wall_glass_alarm", "fg": 1967, "bg": 2058, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1967}, {"id": "corner", "fg": 1965}, {"id": "edge", "fg": 1967}, {"id": "t_connection", "fg": 1966}, {"id": "end_piece", "fg": 1967}, {"id": "unconnected", "fg": 1967}], "rotates": false}, {"id": "t_wall_glass_h", "fg": 1974, "bg": [], "multitile": true, "additional_tiles": [{"id": "center", "fg": 1974}, {"id": "corner", "fg": 1975}, {"id": "edge", "fg": 1974}, {"id": "t_connection", "fg": 1753}, {"id": "end_piece", "fg": 1974}, {"id": "unconnected", "fg": 1974}], "rotates": false}, {"id": "t_wall_glass_h_alarm", "fg": 1967, "bg": 2058, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1967}, {"id": "corner", "fg": 1965}, {"id": "edge", "fg": 1967}, {"id": "t_connection", "fg": 1966}, {"id": "end_piece", "fg": 1967}, {"id": "unconnected", "fg": 1967}], "rotates": false}, {"id": "t_wall_glass_v", "fg": 1974, "bg": [], "multitile": true, "additional_tiles": [{"id": "center", "fg": 1974}, {"id": "corner", "fg": 1975}, {"id": "edge", "fg": 1974}, {"id": "t_connection", "fg": 1753}, {"id": "end_piece", "fg": 1974}, {"id": "unconnected", "fg": 1974}], "rotates": false}, {"id": "t_wall_glass_v_alarm", "fg": 1967, "bg": 2058, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1967}, {"id": "corner", "fg": 1965}, {"id": "edge", "fg": 1967}, {"id": "t_connection", "fg": 1966}, {"id": "end_piece", "fg": 1967}, {"id": "unconnected", "fg": 1967}], "rotates": false}, {"id": "t_wall_g", "fg": 1800, "bg": 1935, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1800}, {"id": "corner", "fg": 1801}, {"id": "edge", "fg": 1800}, {"id": "t_connection", "fg": 1802}, {"id": "end_piece", "fg": 1800}, {"id": "unconnected", "fg": 1800}], "rotates": false}, {"id": "t_wall_half", "fg": 2077, "rotates": false}, {"id": "t_wall_h", "fg": 2085, "bg": 1935, "multitile": true, "additional_tiles": [{"id": "center", "fg": 2085}, {"id": "corner", "fg": 1955}, {"id": "edge", "fg": 2085}, {"id": "t_connection", "fg": 1956}, {"id": "end_piece", "fg": 2085}, {"id": "unconnected", "fg": 2085}], "rotates": false}, {"id": "t_wall_h_b", "fg": 1797, "bg": 1935, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1797}, {"id": "corner", "fg": 1798}, {"id": "edge", "fg": 1797}, {"id": "t_connection", "fg": 1799}, {"id": "end_piece", "fg": 1797}, {"id": "unconnected", "fg": 1797}], "rotates": false}, {"id": "t_wall_h_g", "fg": 1800, "bg": 1935, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1800}, {"id": "corner", "fg": 1801}, {"id": "edge", "fg": 1800}, {"id": "t_connection", "fg": 1802}, {"id": "end_piece", "fg": 1800}, {"id": "unconnected", "fg": 1800}], "rotates": false}, {"id": "t_wall_h_p", "fg": 1806, "bg": 1935, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1806}, {"id": "corner", "fg": 1807}, {"id": "edge", "fg": 1806}, {"id": "t_connection", "fg": 1808}, {"id": "end_piece", "fg": 1806}, {"id": "unconnected", "fg": 1806}], "rotates": false}, {"id": "t_wall_h_r", "fg": 1794, "bg": 1935, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1794}, {"id": "corner", "fg": 1795}, {"id": "edge", "fg": 1794}, {"id": "t_connection", "fg": 1796}, {"id": "end_piece", "fg": 1794}, {"id": "unconnected", "fg": 1794}], "rotates": false}, {"id": "t_wall_h_w", "fg": 2085, "bg": 1935, "multitile": true, "additional_tiles": [{"id": "center", "fg": 2085}, {"id": "corner", "fg": 1955}, {"id": "edge", "fg": 2085}, {"id": "t_connection", "fg": 1956}, {"id": "end_piece", "fg": 2085}, {"id": "unconnected", "fg": 2085}], "rotates": false}, {"id": "t_wall_h_y", "fg": 1803, "bg": 1935, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1803}, {"id": "corner", "fg": 1804}, {"id": "edge", "fg": 1803}, {"id": "t_connection", "fg": 1805}, {"id": "end_piece", "fg": 1803}, {"id": "unconnected", "fg": 1803}], "rotates": false}, {"id": "t_wall_log", "fg": 2078, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1885}, {"id": "corner", "fg": 1886}, {"id": "edge", "fg": 1887}, {"id": "t_connection", "fg": 1888}, {"id": "end_piece", "fg": 1889}, {"id": "unconnected", "fg": 2078}], "rotates": false}, {"id": "t_wall_log_broken", "fg": 2080, "bg": 1924, "rotates": false}, {"id": "t_wall_log_chipped", "fg": 2079, "bg": 1924, "rotates": false}, {"id": "t_wall_log_half", "fg": 2077, "bg": 1924, "rotates": false}, {"id": "t_wall_metal", "fg": 1964, "bg": 1924, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1902}, {"id": "corner", "fg": 1898}, {"id": "edge", "fg": 1900}, {"id": "t_connection", "fg": 1899}, {"id": "end_piece", "fg": 1901}, {"id": "unconnected", "fg": 1897}], "rotates": false}, {"id": "t_wall_metal_h", "fg": 1964, "bg": 1924, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1964}, {"id": "corner", "fg": 1962}, {"id": "edge", "fg": 1964}, {"id": "t_connection", "fg": 1963}, {"id": "end_piece", "fg": 1964}, {"id": "unconnected", "fg": 1964}], "rotates": false}, {"id": "t_wall_metal_v", "fg": 1964, "bg": 1924, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1964}, {"id": "corner", "fg": 1962}, {"id": "edge", "fg": 1964}, {"id": "t_connection", "fg": 1963}, {"id": "end_piece", "fg": 1964}, {"id": "unconnected", "fg": 1964}], "rotates": false}, {"id": "t_wall_p", "fg": 1806, "bg": 1935, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1806}, {"id": "corner", "fg": 1807}, {"id": "edge", "fg": 1806}, {"id": "t_connection", "fg": 1808}, {"id": "end_piece", "fg": 1806}, {"id": "unconnected", "fg": 1806}], "rotates": false}, {"id": "t_wall_r", "fg": 1794, "bg": 1935, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1794}, {"id": "corner", "fg": 1795}, {"id": "edge", "fg": 1794}, {"id": "t_connection", "fg": 1796}, {"id": "end_piece", "fg": 1794}, {"id": "unconnected", "fg": 1794}], "rotates": false}, {"id": "t_wall_v", "fg": 2085, "bg": 1935, "multitile": true, "additional_tiles": [{"id": "center", "fg": 2085}, {"id": "corner", "fg": 1955}, {"id": "edge", "fg": 2085}, {"id": "t_connection", "fg": 1956}, {"id": "end_piece", "fg": 2085}, {"id": "unconnected", "fg": 2085}], "rotates": false}, {"id": "t_wall_v_b", "fg": 1797, "bg": 1935, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1797}, {"id": "corner", "fg": 1798}, {"id": "edge", "fg": 1797}, {"id": "t_connection", "fg": 1799}, {"id": "end_piece", "fg": 1797}, {"id": "unconnected", "fg": 1797}], "rotates": false}, {"id": "t_wall_v_g", "fg": 1800, "bg": 1935, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1800}, {"id": "corner", "fg": 1801}, {"id": "edge", "fg": 1800}, {"id": "t_connection", "fg": 1802}, {"id": "end_piece", "fg": 1800}, {"id": "unconnected", "fg": 1800}], "rotates": false}, {"id": "t_wall_v_p", "fg": 1806, "bg": 1935, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1806}, {"id": "corner", "fg": 1807}, {"id": "edge", "fg": 1806}, {"id": "t_connection", "fg": 1808}, {"id": "end_piece", "fg": 1806}, {"id": "unconnected", "fg": 1806}], "rotates": false}, {"id": "t_wall_v_r", "fg": 1794, "bg": 1935, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1794}, {"id": "corner", "fg": 1795}, {"id": "edge", "fg": 1794}, {"id": "t_connection", "fg": 1796}, {"id": "end_piece", "fg": 1794}, {"id": "unconnected", "fg": 1794}], "rotates": false}, {"id": "t_wall_v_w", "fg": 2085, "bg": 1935, "multitile": true, "additional_tiles": [{"id": "center", "fg": 2085}, {"id": "corner", "fg": 1955}, {"id": "edge", "fg": 2085}, {"id": "t_connection", "fg": 1956}, {"id": "end_piece", "fg": 2085}, {"id": "unconnected", "fg": 2085}], "rotates": false}, {"id": "t_wall_v_y", "fg": 1803, "bg": 1935, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1803}, {"id": "corner", "fg": 1804}, {"id": "edge", "fg": 1803}, {"id": "t_connection", "fg": 1805}, {"id": "end_piece", "fg": 1803}, {"id": "unconnected", "fg": 1803}], "rotates": false}, {"id": "t_wall_wood_broken", "fg": 2080, "rotates": false}, {"id": "t_wall_wood_chipped", "fg": 2079, "rotates": false}, {"id": ["t_wall_wood", "t_wall_wood_line"], "fg": 1889, "multitile": true, "additional_tiles": [{"id": "center", "fg": 2018}, {"id": "corner", "fg": 2019}, {"id": "edge", "fg": 2020}, {"id": "t_connection", "fg": 2021}, {"id": "end_piece", "fg": 2020}, {"id": "unconnected", "fg": 1890}], "rotates": false}, {"id": "t_wall_w", "fg": 2085, "bg": 1935, "multitile": true, "additional_tiles": [{"id": "center", "fg": 2085}, {"id": "corner", "fg": 1955}, {"id": "edge", "fg": 2085}, {"id": "t_connection", "fg": 1956}, {"id": "end_piece", "fg": 2085}, {"id": "unconnected", "fg": 2085}], "rotates": false}, {"id": "t_wall_y", "fg": 1803, "bg": 1935, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1803}, {"id": "corner", "fg": 1804}, {"id": "edge", "fg": 1803}, {"id": "t_connection", "fg": 1805}, {"id": "end_piece", "fg": 1803}, {"id": "unconnected", "fg": 1803}], "rotates": false}, {"id": "t_water_dp", "fg": 1958, "rotates": false}, {"id": "t_water_pool", "fg": 1957, "rotates": false}, {"id": "t_water_pump", "fg": 1820, "rotates": false}, {"id": "t_water_sh", "fg": 1957, "rotates": false}, {"id": "t_wax", "fg": 1787, "rotates": false}, {"id": "t_window_alarm", "fg": 2070, "rotates": true}, {"id": "t_window_alarm_taped", "fg": 2071, "rotates": false}, {"id": "t_window_bars_alarm", "fg": 2005, "multitile": true, "additional_tiles": [{"id": "center", "fg": 2014}, {"id": "corner", "fg": 2006}, {"id": "edge", "fg": 2005}, {"id": "t_connection", "fg": 2015}, {"id": "end_piece", "fg": 2005}, {"id": "unconnected", "fg": 2005}], "rotates": false}, {"id": ["t_window_bars_alarm", "t_window_bars", "t_bars"], "fg": 2087, "multitile": true, "additional_tiles": [{"id": "center", "fg": 2014}, {"id": "corner", "fg": 2006}, {"id": "edge", "fg": 2005}, {"id": "t_connection", "fg": 2015}, {"id": "end_piece", "fg": 2005}, {"id": "unconnected", "fg": 2087}], "rotates": false}, {"id": "t_window_boarded", "fg": 2074, "bg": 2058, "rotates": false}, {"id": "t_window_boarded_noglass", "fg": 1779, "rotates": false}, {"id": "t_window_domestic", "fg": 2070, "rotates": false}, {"id": "t_window_domestic_taped", "fg": 2071, "rotates": false}, {"id": "t_window_empty", "fg": 2091, "bg": 2058, "rotates": false}, {"id": "t_window_enhanced", "fg": 1782, "rotates": false}, {"id": "t_window_enhanced_noglass", "fg": 1783, "rotates": false}, {"id": "t_window_frame", "fg": 2073, "bg": 2058, "rotates": false}, {"id": ["t_window_open", "t_window_no_curtains_open"], "fg": 2072, "rotates": false}, {"id": "t_window_reinforced", "fg": 1780, "rotates": false}, {"id": "t_window_reinforced_noglass", "fg": 1781, "rotates": false}, {"id": "t_window_stained_blue", "fg": 1771, "bg": 2058, "rotates": true}, {"id": "t_window_stained_green", "fg": 1761, "bg": 2058, "rotates": true}, {"id": "t_window_stained_red", "fg": 1772, "bg": 2058, "rotates": true}, {"id": ["t_window_taped", "t_window_no_curtains_taped"], "fg": 2071, "rotates": false}, {"id": ["t_window", "t_window_no_curtains"], "fg": 2070, "rotates": false}, {"id": "t_wreckage", "bg": 1977, "rotates": false}, {"id": "121_tr_rollmat_0", "fg": 2101, "rotates": false}, {"id": "tr_beartrap", "fg": 2113, "rotates": false}, {"id": "tr_beartrap_buried", "fg": 1824, "rotates": false}, {"id": "tr_blade", "fg": 2128, "rotates": true}, {"id": "tr_boobytrap", "fg": 2109, "rotates": false}, {"id": "tr_brazier", "fg": 2107, "rotates": false}, {"id": "tr_bubblewrap", "fg": 2127, "rotates": false}, {"id": "tr_caltrops", "fg": 898, "rotates": false}, {"id": "tr_cot", "fg": 2104, "rotates": false}, {"id": "tr_crossbow", "fg": 2115, "rotates": false}, {"id": "tr_dissector", "fg": 2118, "rotates": false}, {"id": "tr_drain", "fg": 2112, "rotates": false}, {"id": "tr_engine", "fg": 2108, "rotates": false}, {"id": "tr_funnel", "fg": 2105, "rotates": false}, {"id": "tr_fur_rollmat", "fg": 2103, "rotates": false}, {"id": "tr_glass_pit", "fg": 1848, "multitile": true, "additional_tiles": [{"id": "center", "fg": 1843}, {"id": "corner", "fg": 1844}, {"id": "edge", "fg": 1845}, {"id": "t_connection", "fg": 1846}, {"id": "end_piece", "fg": 1847}, {"id": "unconnected", "fg": 1848}], "rotates": false}, {"id": "tr_glow", "fg": 2112, "rotates": false}, {"id": "tr_goo", "fg": 2134, "multitile": true, "additional_tiles": [{"id": "center", "fg": 2129}, {"id": "corner", "fg": 2130}, {"id": "edge", "fg": 2131}, {"id": "t_connection", "fg": 2132}, {"id": "end_piece", "fg": 2133}, {"id": "unconnected", "fg": 2134}], "rotates": false}, {"id": "tr_heavy_snare", "fg": 2120, "rotates": false}, {"id": "tr_hum", "fg": 2112, "rotates": false}, {"id": "tr_landmine", "fg": 2117, "rotates": false}, {"id": "tr_landmine_buried", "fg": 1824, "rotates": false}, {"id": "tr_lava", "bg": 1978, "rotates": false}, {"id": "tr_leather_funnel", "fg": 2125, "rotates": false, "multitile": false}, {"id": "tr_ledge", "bg": [], "rotates": false}, {"id": "tr_light_snare", "fg": 2120, "rotates": false}, {"id": "tr_makeshift_funnel", "fg": 2106, "rotates": false}, {"id": "tr_nailboard", "fg": 2114, "rotates": false}, {"id": "tr_pit", "fg": 1880, "multitile": true, "additional_tiles": [{"id": "center", "fg": 2022}, {"id": "corner", "fg": 2023}, {"id": "edge", "fg": 2024}, {"id": "t_connection", "fg": 2025}, {"id": "end_piece", "fg": 2026}, {"id": "unconnected", "fg": 1880}], "rotates": false}, {"id": "tr_portal", "fg": 2102, "multitile": true, "additional_tiles": [{"id": "center", "fg": 2121}, {"id": "corner", "fg": 2135}, {"id": "edge", "fg": 2122}, {"id": "t_connection", "fg": 2123}, {"id": "end_piece", "fg": 2124}, {"id": "unconnected", "fg": 2102}], "rotates": false}, {"id": "tr_rollmat", "fg": 2101, "rotates": false}, {"id": "tr_shadow", "fg": 2112, "rotates": false}, {"id": "tr_shotgun_1", "fg": 2116, "rotates": false}, {"id": "tr_shotgun_2", "fg": 2116, "rotates": false}, {"id": "tr_sinkhole", "bg": 1880, "rotates": false}, {"id": "tr_snake", "fg": 2112, "rotates": false}, {"id": "tr_snare", "fg": 2120, "rotates": false}, {"id": "tr_spike_pit", "fg": 1923, "multitile": true, "additional_tiles": [{"id": "center", "fg": 2034}, {"id": "corner", "fg": 2035}, {"id": "edge", "fg": 2036}, {"id": "t_connection", "fg": 2037}, {"id": "end_piece", "fg": 2038}, {"id": "unconnected", "fg": 1923}], "rotates": false}, {"id": "tr_telepad", "fg": 2126, "rotates": false}, {"id": "tr_temple_flood", "fg": 2110, "rotates": false}, {"id": "tr_temple_toggle", "fg": 2111, "rotates": false}, {"id": "tr_tripwire", "fg": 2119, "rotates": false}], "//": "range 1 to 2144"}, {"file": "fallback.png", "tiles": [], "ascii": [{"offset": 0, "bold": false, "color": "BLACK"}, {"offset": 256, "bold": true, "color": "WHITE"}, {"offset": 512, "bold": false, "color": "WHITE"}, {"offset": 768, "bold": true, "color": "BLACK"}, {"offset": 1024, "bold": false, "color": "RED"}, {"offset": 1280, "bold": false, "color": "GREEN"}, {"offset": 1536, "bold": false, "color": "BLUE"}, {"offset": 1792, "bold": false, "color": "CYAN"}, {"offset": 2048, "bold": false, "color": "MAGENTA"}, {"offset": 2304, "bold": false, "color": "YELLOW"}, {"offset": 2560, "bold": true, "color": "RED"}, {"offset": 2816, "bold": true, "color": "GREEN"}, {"offset": 3072, "bold": true, "color": "BLUE"}, {"offset": 3328, "bold": true, "color": "CYAN"}, {"offset": 3584, "bold": true, "color": "MAGENTA"}, {"offset": 3840, "bold": true, "color": "YELLOW"}]}]} \ No newline at end of file +{ + "tile_info": [ + { "width": 20, "height": 20 } + ], + "tiles-new": [ + { + "file": "tiles.png", + "tiles": [ + { "id": "npc_female", "fg": 4, "rotates": false }, + { "id": "npc_male", "fg": 3, "rotates": false }, + { "id": "player_female", "fg": 2, "rotates": false }, + { "id": "player_male", "fg": 1, "rotates": false }, + { "id": "overlay_female_mutation_BEAUTIFUL2", "fg": 27, "rotates": false }, + { "id": "overlay_female_mutation_BEAUTIFUL3", "fg": 27, "rotates": false }, + { "id": "overlay_female_mutation_BEAUTIFUL", "fg": 27, "rotates": false }, + { "id": "overlay_female_mutation_PRETTY", "fg": 27, "rotates": false }, + { "id": "overlay_mutation_ANTENNAE", "fg": 26, "rotates": false }, + { "id": "overlay_mutation_ANTLERS", "fg": 25, "rotates": false }, + { "id": "overlay_mutation_ARACHNID_ARMS", "fg": 24, "rotates": false }, + { "id": "overlay_mutation_ARACHNID_ARMS_OK", "fg": 24, "rotates": false }, + { "id": "overlay_mutation_ARM_TENTACLES", "fg": 24, "rotates": false }, + { "id": "overlay_mutation_ARM_TENTACLES_4", "fg": 24, "rotates": false }, + { "id": "overlay_mutation_ARM_TENTACLES_8", "fg": 24, "rotates": false }, + { "id": "overlay_mutation_BEAK", "fg": 23, "rotates": false }, + { "id": "overlay_mutation_BEAK_HUM", "fg": 23, "rotates": false }, + { "id": "overlay_mutation_BEAK_PECK", "fg": 23, "rotates": false }, + { "id": "overlay_mutation_BURROW", "fg": 22, "rotates": false }, + { "id": "overlay_mutation_CANINE_EARS", "fg": 7, "rotates": false }, + { "id": "overlay_mutation_CHITIN2", "fg": 20, "rotates": false }, + { "id": "overlay_mutation_CHITIN3", "fg": 20, "rotates": false }, + { "id": "overlay_mutation_CHITIN", "fg": 20, "rotates": false }, + { "id": "overlay_mutation_CHITIN_FUR2", "fg": 20, "rotates": false }, + { "id": "overlay_mutation_CHITIN_FUR3", "fg": 20, "rotates": false }, + { "id": "overlay_mutation_CHITIN_FUR", "fg": 20, "rotates": false }, + { "id": "overlay_mutation_CLAWS", "fg": 21, "rotates": false }, + { "id": "overlay_mutation_CLAWS_RAT", "fg": 21, "rotates": false }, + { "id": "overlay_mutation_CLAWS_RETRACT", "fg": 21, "rotates": false }, + { "id": "overlay_mutation_CLAWS_ST", "fg": 21, "rotates": false }, + { "id": "overlay_mutation_CLAWS_TENTACLE", "fg": 24, "rotates": false }, + { "id": "overlay_mutation_DEFORMED2", "fg": 16, "rotates": false }, + { "id": "overlay_mutation_DEFORMED3", "fg": 16, "rotates": false }, + { "id": "overlay_mutation_DEFORMED", "fg": 16, "rotates": false }, + { "id": "overlay_mutation_DOWN", "fg": 16, "rotates": false }, + { "id": "overlay_mutation_ELFA_EARS", "fg": 6, "rotates": false }, + { "id": "overlay_mutation_FANGS", "fg": 13, "rotates": false }, + { "id": "overlay_mutation_FANGS_SPIDER", "fg": 13, "rotates": false }, + { "id": "overlay_mutation_FEATHERS", "fg": 15, "rotates": false }, + { "id": "overlay_mutation_FELINE_EARS", "fg": 5, "rotates": false }, + { "id": "overlay_mutation_FELINE_FUR", "fg": 19, "rotates": false }, + { "id": "overlay_mutation_FUR", "fg": 19, "rotates": false }, + { "id": "overlay_mutation_HORNS", "fg": 12, "rotates": false }, + { "id": "overlay_mutation_HORNS_CURLED", "fg": 12, "rotates": false }, + { "id": "overlay_mutation_HORNS_POINTED", "fg": 12, "rotates": false }, + { "id": "overlay_mutation_INFRARED", "fg": 14, "rotates": false }, + { "id": "overlay_mutation_INSECT_ARMS", "fg": 24, "rotates": false }, + { "id": "overlay_mutation_INSECT_ARMS_OK", "fg": 24, "rotates": false }, + { "id": "overlay_mutation_LEG_TENTACLES", "fg": 11, "rotates": false }, + { "id": "overlay_mutation_LIZ_EYE", "fg": 14, "rotates": false }, + { "id": "overlay_mutation_LYNX_FUR", "fg": 19, "rotates": false }, + { "id": "overlay_mutation_MUZZLE_LONG", "fg": 17, "rotates": false }, + { "id": "overlay_mutation_NAILS", "fg": 21, "rotates": false }, + { "id": "overlay_mutation_NIGHTVISION3", "fg": 14, "rotates": false }, + { "id": "overlay_mutation_RADIOACTIVE2", "fg": 10, "rotates": false }, + { "id": "overlay_mutation_RADIOACTIVE3", "fg": 9, "rotates": false }, + { "id": "overlay_mutation_SCALES", "fg": 15, "rotates": false }, + { "id": "overlay_mutation_SLEEK_SCALES", "fg": 15, "rotates": false }, + { "id": "overlay_mutation_SLIME_HANDS", "fg": 24, "rotates": false }, + { "id": "overlay_mutation_SLIMY", "fg": 18, "rotates": false }, + { "id": "overlay_mutation_SNOUT", "fg": 17, "rotates": false }, + { "id": "overlay_mutation_TAIL_CATTLE", "fg": 8, "rotates": false }, + { "id": "overlay_mutation_TAIL_CLUB", "fg": 8, "rotates": false }, + { "id": "overlay_mutation_TAIL_LONG", "fg": 8, "rotates": false }, + { "id": "overlay_mutation_TAIL_RAPTOR", "fg": 8, "rotates": false }, + { "id": "overlay_mutation_TAIL_RAT", "fg": 8, "rotates": false }, + { "id": "overlay_mutation_TAIL_STING", "fg": 8, "rotates": false }, + { "id": "overlay_mutation_TAIL_STUB", "fg": 8, "rotates": false }, + { "id": "overlay_mutation_TAIL_THICK", "fg": 8, "rotates": false }, + { "id": "overlay_mutation_THICK_SCALES", "fg": 15, "rotates": false }, + { "id": "overlay_mutation_URSINE_FUR", "fg": 19, "rotates": false }, + { "id": "overlay_mutation_WHISKERS", "fg": 30, "rotates": false }, + { "id": "overlay_mutation_WINGS_BAT", "fg": 29, "rotates": false }, + { "id": "overlay_mutation_WINGS_BIRD", "fg": 29, "rotates": false }, + { "id": "overlay_mutation_WINGS_BUTTERFLY", "fg": 29, "rotates": false }, + { "id": "overlay_mutation_WINGS_INSECT", "fg": 28, "rotates": false }, + { "id": "overlay_mutation_WINGS_STUB", "fg": 28, "rotates": false }, + { "id": "overlay_mutation_BIOLUM1", "fg": 31, "rotates": false }, + { "id": "overlay_mutation_BIOLUM2", "fg": 32, "rotates": false }, + { "id": "overlay_mutation_CEPH_EYES", "fg": 33, "rotates": false }, + { "id": "overlay_mutation_CHITIN", "fg": 34, "rotates": false }, + { "id": "overlay_mutation_ELFAEYES", "fg": 35, "rotates": false }, + { "id": "overlay_female_mutation_FLOWERS", "fg": 36, "rotates": false }, + { "id": "overlay_mutation_FLOWERS", "fg": 37, "rotates": false }, + { "id": "overlay_mutation_SCALES", "fg": 38, "rotates": false }, + { "id": "overlay_female_mutation_TERRIFYING", "fg": 39, "rotates": false }, + { "id": "overlay_mutation_TERRIFYING", "fg": 40, "rotates": false }, + { "id": "overlay_worn_10gal_hat", "fg": 79, "rotates": false }, + { "id": "overlay_worn_apron_leather", "fg": 76, "rotates": false }, + { "id": "overlay_worn_armor_plate", "fg": 136, "rotates": false }, + { "id": "overlay_worn_armor_samurai", "fg": 77, "rotates": false }, + { "id": "overlay_worn_army_top", "fg": 62, "rotates": false }, + { + "id": [ + "overlay_worn_backpack", + "overlay_worn_runner_bag", + "overlay_worn_backpack_leather", + "overlay_worn_survivor_pack", + "overlay_worn_survivor_runner_pack", + "overlay_worn_survivor_duffel_bag", + "overlay_worn_survivor_rucksack", + "overlay_worn_mbag" + ], + "fg": 65, + "rotates": false + }, + { "id": "overlay_worn_bandana", "fg": 101, "rotates": false }, + { "id": [ "overlay_worn_beret", "overlay_worn_beret_wool" ], "fg": 50, "rotates": false }, + { "id": "overlay_worn_bondage_mask", "fg": 106, "rotates": false }, + { "id": "overlay_worn_bondage_suit", "fg": 105, "rotates": false }, + { "id": "overlay_worn_chestrig", "fg": 42, "rotates": false }, + { "id": "overlay_worn_clown_suit", "fg": 95, "rotates": false }, + { "id": "overlay_worn_coat_lab", "fg": 122, "rotates": false }, + { "id": "overlay_worn_coat_winter", "fg": 127, "rotates": false }, + { "id": "overlay_worn_corset", "fg": 107, "rotates": false }, + { "id": "overlay_worn_cowboy_hat", "fg": 80, "rotates": false }, + { "id": "overlay_worn_cowl_wool", "fg": 98, "rotates": false }, + { "id": "overlay_worn_dress", "fg": 45, "rotates": false }, + { "id": "overlay_worn_dress_shirt", "fg": 131, "rotates": false }, + { "id": "overlay_worn_dress_wedding", "fg": 66, "rotates": false }, + { "id": "overlay_worn_entry_suit", "fg": 135, "rotates": false }, + { "id": "overlay_worn_fancy_sunglasses", "fg": 53, "rotates": false }, + { "id": "overlay_worn_fedora", "fg": 81, "rotates": false }, + { "id": "overlay_worn_flag_shirt", "fg": 94, "rotates": false }, + { "id": "overlay_worn_football_armor", "fg": 72, "rotates": false }, + { + "id": [ "overlay_worn_glasses_eye", "overlay_worn_glasses_reading", "overlay_worn_glasses_bifocal" ], + "fg": 52, + "rotates": false + }, + { "id": "overlay_worn_glasses_monocle", "fg": 115, "rotates": false }, + { "id": "overlay_worn_glasses_safety", "fg": 54, "rotates": false }, + { "id": [ "overlay_worn_goggles_ir_on", "overlay_worn_goggles_ir" ], "fg": 55, "rotates": false }, + { "id": [ "overlay_worn_goggles_nv_on", "overlay_worn_goggles_nv" ], "fg": 57, "rotates": false }, + { "id": "overlay_worn_goggles_welding", "fg": 56, "rotates": false }, + { "id": "overlay_worn_greatcoat", "fg": 43, "rotates": false }, + { "id": "overlay_worn_hat_ball", "fg": 69, "rotates": false }, + { "id": "overlay_worn_hat_chef", "fg": 46, "rotates": false }, + { "id": "overlay_worn_hat_cotton", "fg": 114, "rotates": false }, + { "id": "overlay_worn_hat_hard", "fg": 120, "rotates": false }, + { "id": "overlay_worn_hat_hunting", "fg": 83, "rotates": false }, + { "id": "overlay_worn_hat_noise_cancelling", "fg": 104, "rotates": false }, + { "id": "overlay_worn_hazmat_suit", "fg": 103, "rotates": false }, + { "id": "overlay_worn_headgear", "fg": 71, "rotates": false }, + { "id": "overlay_worn_helmet_army", "fg": 141, "rotates": false }, + { "id": "overlay_worn_helmet_ball", "fg": 74, "rotates": false }, + { "id": "overlay_worn_helmet_barbute", "fg": 137, "rotates": false }, + { "id": "overlay_worn_helmet_bike", "fg": 126, "rotates": false }, + { "id": "overlay_worn_helmet_football", "fg": 73, "rotates": false }, + { "id": "overlay_worn_helmet_kabuto", "fg": 78, "rotates": false }, + { "id": "overlay_worn_helmet_lobster", "fg": 48, "rotates": false }, + { "id": "overlay_worn_helmet_motor", "fg": 113, "rotates": false }, + { "id": "overlay_worn_helmet_plate", "fg": 138, "rotates": false }, + { "id": "overlay_worn_helmet_riot", "fg": 139, "rotates": false }, + { "id": "overlay_worn_helmet_skid", "fg": 123, "rotates": false }, + { "id": "overlay_worn_helmet_survivor", "fg": 139, "rotates": false }, + { "id": "overlay_worn_helmet_xlsurvivor", "fg": 139, "rotates": false }, + { "id": [ "overlay_worn_hoodie", "overlay_worn_wool_hoodie" ], "fg": 60, "rotates": false }, + { "id": "overlay_worn_house_coat", "fg": 96, "rotates": false }, + { "id": "overlay_worn_jacket_army", "fg": 51, "rotates": false }, + { "id": "overlay_worn_jacket_flannel", "fg": 82, "rotates": false }, + { "id": "overlay_worn_jacket_jean", "fg": 109, "rotates": false }, + { + "id": [ "overlay_worn_jacket_leather", "overlay_worn_jacket_leather_mod", "overlay_worn_jacket_windbreaker" ], + "fg": 112, + "rotates": false + }, + { "id": "overlay_worn_jacket_light", "fg": 110, "rotates": false }, + { "id": "overlay_worn_jersey", "fg": 75, "rotates": false }, + { "id": [ "overlay_worn_judo_belt_black", "overlay_worn_obi_gi" ], "fg": 85, "rotates": false }, + { "id": "overlay_worn_judo_belt_blue", "fg": 87, "rotates": false }, + { "id": "overlay_worn_judo_belt_brown", "fg": 86, "rotates": false }, + { "id": "overlay_worn_judo_belt_green", "fg": 88, "rotates": false }, + { "id": "overlay_worn_judo_belt_orange", "fg": 89, "rotates": false }, + { "id": "overlay_worn_judo_belt_white", "fg": 91, "rotates": false }, + { "id": "overlay_worn_judo_belt_yellow", "fg": 90, "rotates": false }, + { "id": [ "overlay_worn_jumpsuit_xl", "overlay_worn_jumpsuit" ], "fg": 84, "rotates": false }, + { "id": [ "overlay_worn_karate_gi", "overlay_worn_judo_gi" ], "fg": 92, "rotates": false }, + { "id": "overlay_worn_kevlar", "fg": 111, "rotates": false }, + { "id": "overlay_worn_knit_scarf", "fg": 140, "rotates": false }, + { "id": "overlay_worn_knit_scarf_loose", "fg": 140, "rotates": false }, + { "id": "overlay_worn_kufi", "fg": 44, "rotates": false }, + { "id": "overlay_worn_linuxtshirt", "fg": 134, "rotates": false }, + { "id": "overlay_worn_longshirt", "fg": 130, "rotates": false }, + { "id": "overlay_worn_long_knit_scarf", "fg": 140, "rotates": false }, + { "id": "overlay_worn_long_knit_scarf_loose", "fg": 140, "rotates": false }, + { "id": "overlay_worn_long_patchwork_scarf", "fg": 140, "rotates": false }, + { "id": "overlay_worn_long_patchwork_scarf_loose", "fg": 140, "rotates": false }, + { "id": "overlay_worn_maid_dress", "fg": 108, "rotates": false }, + { "id": "overlay_worn_maid_hat", "fg": 125, "rotates": false }, + { "id": "overlay_worn_maid_hat", "fg": 68, "rotates": false }, + { "id": "overlay_worn_mask_dust", "fg": 116, "rotates": false }, + { "id": "overlay_worn_mask_filter", "fg": 121, "rotates": false }, + { "id": "overlay_worn_mask_gas", "fg": 142, "rotates": false }, + { "id": "overlay_worn_mask_gas_xl", "fg": 142, "rotates": false }, + { "id": [ "overlay_worn_mask_hockey", "overlay_worn_mask_guy_fawkes" ], "fg": 117, "rotates": false }, + { "id": "overlay_worn_mask_rioter", "fg": 99, "rotates": false }, + { + "id": [ "overlay_worn_mask_ski", "overlay_worn_mask_ski_loose", "overlay_worn_balclava" ], + "fg": 97, + "rotates": false + }, + { "id": "overlay_worn_mask_survivorxl", "fg": 142, "rotates": false }, + { "id": "overlay_worn_mask_survivor", "fg": 142, "rotates": false }, + { "id": "overlay_worn_mask_wsurvivorxl", "fg": 142, "rotates": false }, + { "id": "overlay_worn_mask_wsurvivor", "fg": 142, "rotates": false }, + { "id": "overlay_worn_motorbike_armor", "fg": 135, "rotates": false }, + { "id": "overlay_worn_patchwork_scarf", "fg": 140, "rotates": false }, + { "id": "overlay_worn_patchwork_scarf_loose", "fg": 140, "rotates": false }, + { "id": "overlay_worn_pickelhaube", "fg": 49, "rotates": false }, + { "id": "overlay_worn_polo_shirt", "fg": 133, "rotates": false }, + { "id": [ "overlay_worn_poncho", "overlay_worn_folding_poncho_on" ], "fg": 118, "rotates": false }, + { "id": "overlay_worn_porkpie", "fg": 129, "rotates": false }, + { "id": "overlay_worn_pot_helmet", "fg": 124, "rotates": false }, + { + "id": [ "overlay_worn_purse", "overlay_worn_slingpack", "overlay_worn_fanny", "overlay_worn_dive_bag" ], + "fg": 63, + "rotates": false + }, + { + "id": [ "overlay_worn_rucksack", "overlay_worn_molle_pack", "overlay_worn_gobag", "overlay_worn_duffelbag" ], + "fg": 64, + "rotates": false + }, + { "id": "overlay_worn_scarf", "fg": 140, "rotates": false }, + { "id": "overlay_worn_scarf_fur", "fg": 140, "rotates": false }, + { "id": "overlay_worn_scarf_fur_long", "fg": 140, "rotates": false }, + { "id": "overlay_worn_scarf_fur_loose", "fg": 140, "rotates": false }, + { "id": "overlay_worn_scarf_long", "fg": 140, "rotates": false }, + { "id": "overlay_worn_scarf_long_loose", "fg": 140, "rotates": false }, + { "id": "overlay_worn_scarf_loose", "fg": 140, "rotates": false }, + { "id": "overlay_worn_shark_suit", "fg": 135, "rotates": false }, + { "id": "overlay_worn_sheriffshirt", "fg": 130, "rotates": false }, + { "id": "overlay_worn_shoulder_strap", "fg": 41, "rotates": false }, + { "id": "overlay_worn_striped_shirt", "fg": 131, "rotates": false }, + { "id": "overlay_worn_subsuit_xl", "fg": 102, "rotates": false }, + { "id": "overlay_worn_suit", "fg": 67, "rotates": false }, + { "id": "overlay_worn_sunglasses", "fg": 47, "rotates": false }, + { "id": "overlay_worn_sweater", "fg": 59, "rotates": false }, + { "id": "overlay_worn_sweatshirt", "fg": 58, "rotates": false }, + { "id": "overlay_worn_tac_helmet", "fg": 139, "rotates": false }, + { "id": "overlay_worn_tank_top", "fg": 70, "rotates": false }, + { "id": "overlay_worn_tank_top", "fg": 61, "rotates": false }, + { "id": "overlay_worn_technician_shirt_blue", "fg": 132, "rotates": false }, + { "id": "overlay_worn_technician_shirt_gray", "fg": 133, "rotates": false }, + { "id": "overlay_worn_technician_shirt_ltblue", "fg": 133, "rotates": false }, + { "id": "overlay_worn_tophat", "fg": 128, "rotates": false }, + { "id": "overlay_worn_trenchcoat", "fg": 119, "rotates": false }, + { "id": "overlay_worn_trenchcoat_leather", "fg": 119, "rotates": false }, + { "id": "overlay_worn_tshirt", "fg": 134, "rotates": false }, + { "id": "overlay_worn_tshirt_text", "fg": 134, "rotates": false }, + { "id": "overlay_worn_turban", "fg": 100, "rotates": false }, + { "id": "overlay_worn_tux", "fg": 93, "rotates": false }, + { "id": "cursor", "fg": 143 }, + { + "id": "explosion", + "fg": 146, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 146 }, + { "id": "corner", "fg": 144 }, + { "id": "edge", "fg": 146 }, + { "id": "t_connection", "fg": 146 }, + { "id": "end_piece", "fg": 146 }, + { "id": "unconnected", "fg": 146 } + ], + "rotates": false + }, + { "id": "footstep", "fg": 147, "rotates": false }, + { "id": "highlight_item", "fg": 148, "rotates": false }, + { "id": "lighting_boomered_dark", "fg": 150, "rotates": false }, + { "id": "lighting_boomered_light", "fg": 149, "rotates": false }, + { "id": "lighting_hidden", "fg": 154, "rotates": false }, + { "id": "lighting_lowlight_dark", "fg": 152, "rotates": false }, + { "id": "lighting_lowlight_light", "fg": 151, "rotates": false }, + { "id": "line_target", "fg": 145 }, + { "id": "line_trail", "bg": 145 }, + { "id": "unknown", "fg": 153, "rotates": false }, + { "id": "animation_bullet_flame", "fg": 158 }, + { "id": "animation_bullet_normal", "fg": 155 }, + { "id": "animation_bullet_shrapnel", "fg": 155 }, + { "id": "animation_hit", "bg": 156 }, + { "id": "animation_line", "bg": 157 }, + { "id": "record_weather", "fg": 968, "rotates": false, "multitile": false }, + { "id": "weatherby_5", "fg": 509, "rotates": false, "multitile": false }, + { "id": "weather_acid_drop", "bg": 160 }, + { "id": "weather_rain_drop", "bg": 159 }, + { "id": "weather_reader", "fg": 939, "rotates": false, "multitile": false }, + { "id": "weather_snowflake", "bg": 161 }, + { "id": "fd_acid", "bg": 194, "rotates": false }, + { "id": "fd_acid_vent", "fg": 187, "rotates": false }, + { "id": "fd_bees", "fg": 168, "rotates": false }, + { "id": "fd_bile", "bg": 191, "rotates": false }, + { "id": "fd_blood", "bg": 190, "rotates": false }, + { "id": "fd_blood_insect", "bg": 214, "rotates": false }, + { "id": "fd_blood_invertebrate", "bg": 215, "rotates": false }, + { "id": "fd_blood_veggy", "bg": 216, "rotates": false }, + { + "id": "fd_cigsmoke", + "fg": 183, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 178 }, + { "id": "corner", "fg": 179 }, + { "id": "edge", "fg": 180 }, + { "id": "t_connection", "fg": 181 }, + { "id": "end_piece", "fg": 182 }, + { "id": "unconnected", "fg": 183 } + ], + "rotates": false + }, + { + "id": "fd_cracksmoke", + "fg": 183, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 178 }, + { "id": "corner", "fg": 179 }, + { "id": "edge", "fg": 180 }, + { "id": "t_connection", "fg": 181 }, + { "id": "end_piece", "fg": 182 }, + { "id": "unconnected", "fg": 183 } + ], + "rotates": false + }, + { "id": "fd_dazzling", "fg": 177, "rotates": false }, + { + "id": "fd_electricity", + "fg": 192, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 208 }, + { "id": "corner", "fg": 204 }, + { "id": "edge", "fg": 205 }, + { "id": "t_connection", "fg": 206 }, + { "id": "end_piece", "fg": 207 }, + { "id": "unconnected", "fg": 192 } + ], + "rotates": false + }, + { + "id": "fd_fatigue", + "fg": 167, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 162 }, + { "id": "corner", "fg": 163 }, + { "id": "edge", "fg": 164 }, + { "id": "t_connection", "fg": 165 }, + { "id": "end_piece", "fg": 166 }, + { "id": "unconnected", "fg": 167 } + ], + "rotates": false + }, + { + "id": "fd_fire", + "fg": 197, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 220 }, + { "id": "corner", "fg": 221 }, + { "id": "edge", "fg": 222 }, + { "id": "t_connection", "fg": 223 }, + { "id": "end_piece", "fg": 224 }, + { "id": "unconnected", "fg": 197 } + ], + "rotates": false + }, + { "id": "fd_fire_vent", "fg": 185, "rotates": false }, + { + "id": "fd_flame_burst", + "fg": 197, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 220 }, + { "id": "corner", "fg": 221 }, + { "id": "edge", "fg": 222 }, + { "id": "t_connection", "fg": 223 }, + { "id": "end_piece", "fg": 224 }, + { "id": "unconnected", "fg": 197 } + ], + "rotates": false + }, + { + "id": "fd_fungal_haze", + "fg": 175, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 170 }, + { "id": "corner", "fg": 171 }, + { "id": "edge", "fg": 172 }, + { "id": "t_connection", "fg": 173 }, + { "id": "end_piece", "fg": 174 }, + { "id": "unconnected", "fg": 175 } + ], + "rotates": false + }, + { "id": "fd_gas_vent", "fg": 184, "rotates": false }, + { "id": "fd_gibs_flesh", "fg": 217, "rotates": false }, + { "id": "fd_gibs_insect", "fg": 214, "rotates": false }, + { "id": "fd_gibs_invertebrate", "bg": 215, "rotates": false }, + { "id": "fd_gibs_veggy", "bg": 191, "rotates": false }, + { "id": "fd_hot_air1", "fg": 169, "rotates": false }, + { "id": "fd_hot_air2", "fg": 169, "rotates": false }, + { "id": "fd_hot_air3", "fg": 169, "rotates": false }, + { "id": "fd_hot_air4", "fg": 169, "rotates": false }, + { + "id": "fd_incendiary", + "fg": 158, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 220 }, + { "id": "corner", "fg": 221 }, + { "id": "edge", "fg": 222 }, + { "id": "t_connection", "fg": 223 }, + { "id": "end_piece", "fg": 224 }, + { "id": "unconnected", "fg": 158 } + ], + "rotates": false + }, + { "id": "fd_laser", "fg": 219 }, + { + "id": "fd_methsmoke", + "fg": 183, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 178 }, + { "id": "corner", "fg": 179 }, + { "id": "edge", "fg": 180 }, + { "id": "t_connection", "fg": 181 }, + { "id": "end_piece", "fg": 182 }, + { "id": "unconnected", "fg": 183 } + ], + "rotates": false + }, + { + "id": "fd_nuke_gas", + "fg": 189, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 209 }, + { "id": "corner", "fg": 210 }, + { "id": "edge", "fg": 211 }, + { "id": "t_connection", "fg": 212 }, + { "id": "end_piece", "fg": 213 }, + { "id": "unconnected", "fg": 189 } + ], + "rotates": false + }, + { "id": "fd_plasma", "fg": 218 }, + { "id": "fd_push_items", "fg": 2112, "rotates": false }, + { + "id": "fd_relax_gas", + "fg": 167, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 162 }, + { "id": "corner", "fg": 163 }, + { "id": "edge", "fg": 164 }, + { "id": "t_connection", "fg": 165 }, + { "id": "end_piece", "fg": 166 }, + { "id": "unconnected", "fg": 167 } + ], + "rotates": false + }, + { "id": "fd_rubble", "bg": 198, "rotates": false }, + { "id": "fd_sap", "bg": 191, "rotates": false }, + { "id": "fd_shock_vent", "fg": 186, "rotates": false }, + { "id": "fd_slime", "bg": 195, "rotates": false }, + { "id": "fd_sludge", "bg": 196, "rotates": false }, + { + "id": "fd_smoke", + "fg": 203, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 188 }, + { "id": "corner", "fg": 199 }, + { "id": "edge", "fg": 200 }, + { "id": "t_connection", "fg": 201 }, + { "id": "end_piece", "fg": 202 }, + { "id": "unconnected", "fg": 203 } + ], + "rotates": false + }, + { "id": "fd_spotlight", "fg": 176, "rotates": false }, + { + "id": "fd_tear_gas", + "fg": 203, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 188 }, + { "id": "corner", "fg": 199 }, + { "id": "edge", "fg": 200 }, + { "id": "t_connection", "fg": 201 }, + { "id": "end_piece", "fg": 202 }, + { "id": "unconnected", "fg": 203 } + ], + "rotates": false + }, + { + "id": "fd_toxic_gas", + "fg": 189, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 209 }, + { "id": "corner", "fg": 210 }, + { "id": "edge", "fg": 211 }, + { "id": "t_connection", "fg": 212 }, + { "id": "end_piece", "fg": 213 }, + { "id": "unconnected", "fg": 189 } + ], + "rotates": false + }, + { "id": "fd_web", "bg": 193, "rotates": false }, + { + "id": "fd_weedsmoke", + "fg": 183, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 178 }, + { "id": "corner", "fg": 179 }, + { "id": "edge", "fg": 180 }, + { "id": "t_connection", "fg": 181 }, + { "id": "end_piece", "fg": 182 }, + { "id": "unconnected", "fg": 183 } + ], + "rotates": false + }, + { "id": "f_anvil", "fg": 751, "rotates": false, "multitile": false }, + { "id": "f_arcade_machine", "fg": 253, "rotates": false }, + { "id": "f_armchair", "fg": 234, "rotates": false }, + { "id": "f_ash", "bg": 1976, "rotates": false }, + { "id": "f_aut_gas_console", "fg": 1813, "bg": 2058, "rotates": false }, + { "id": "f_aut_gas_console_o", "fg": 1814, "bg": 2058, "rotates": false }, + { "id": "f_ball_mach", "fg": 232, "rotates": false }, + { "id": "f_barricade_road", "fg": 247, "rotates": false }, + { + "id": "f_bathtub", + "fg": 301, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 333 }, + { "id": "corner", "fg": 334 }, + { "id": "edge", "fg": 324 }, + { "id": "t_connection", "fg": 335 }, + { "id": "end_piece", "fg": 325 }, + { "id": "unconnected", "fg": 301 } + ], + "rotates": false + }, + { + "id": "f_bed", + "fg": 230, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 225 }, + { "id": "corner", "fg": 226 }, + { "id": "edge", "fg": 227 }, + { "id": "t_connection", "fg": 228 }, + { "id": "end_piece", "fg": 229 }, + { "id": "unconnected", "fg": 230 } + ], + "rotates": false + }, + { "id": "f_bench", "fg": 270, "rotates": false }, + { "id": "f_bluebell", "fg": 345, "rotates": false }, + { "id": "f_bookcase", "fg": 284, "rotates": false }, + { "id": "f_boulder_large", "fg": 268, "bg": 2049, "rotates": false }, + { "id": "f_boulder_medium", "fg": 267, "bg": 2049, "rotates": false }, + { "id": "f_boulder_small", "fg": 266, "bg": 2049, "rotates": false }, + { "id": "f_bulletin", "fg": 238, "rotates": false }, + { "id": "f_canvas_door", "fg": 316, "rotates": false }, + { "id": "f_canvas_door_o", "fg": 317, "rotates": false }, + { "id": "f_canvas_floor", "bg": 1792, "rotates": false }, + { + "id": "f_canvas_wall", + "fg": 245, + "bg": [ ], + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 311 }, + { "id": "corner", "fg": 312 }, + { "id": "edge", "fg": 313 }, + { "id": "t_connection", "fg": 314 }, + { "id": "end_piece", "fg": 315 }, + { "id": "unconnected", "fg": 245 } + ], + "rotates": false + }, + { "id": "f_cattails", "fg": 265, "rotates": false }, + { "id": "f_center_groundsheet", "bg": 321, "rotates": false }, + { "id": "f_chair", "fg": 231, "rotates": false }, + { + "id": "f_counter", + "fg": 2027, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 323 }, + { "id": "corner", "fg": 326 }, + { "id": "edge", "fg": 327 }, + { "id": "t_connection", "fg": 328 }, + { "id": "end_piece", "fg": 298 }, + { "id": "unconnected", "fg": 2027 } + ], + "rotates": false + }, + { "id": "f_crate_c", "fg": 291, "rotates": false }, + { "id": "f_crate_o", "fg": 296, "rotates": false }, + { "id": "f_cupboard", "fg": 329, "rotates": false }, + { "id": "f_dahlia", "fg": 346, "rotates": false }, + { "id": "f_dandelion", "fg": 259, "rotates": false }, + { "id": "f_datura", "fg": 260, "rotates": false }, + { + "id": "f_desk", + "fg": 232, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 292 }, + { "id": "corner", "fg": 293 }, + { "id": "edge", "fg": 294 }, + { "id": "t_connection", "fg": 295 }, + { "id": "end_piece", "fg": 297 }, + { "id": "unconnected", "fg": 232 } + ], + "rotates": false + }, + { "id": "f_displaycase", "fg": 257, "rotates": false }, + { "id": "f_displaycase_b", "fg": 258, "rotates": false }, + { "id": "f_dive_block", "fg": 290, "rotates": false }, + { "id": "f_dresser", "fg": 285, "rotates": false }, + { "id": "f_dryer", "fg": 300, "rotates": false }, + { + "id": "f_dumpster", + "fg": 289, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 275 }, + { "id": "corner", "fg": 276 }, + { "id": "edge", "fg": 277 }, + { "id": "t_connection", "fg": 278 }, + { "id": "end_piece", "fg": 279 }, + { "id": "unconnected", "fg": 289 } + ], + "rotates": false + }, + { "id": "f_egg_sackbw", "fg": 250, "rotates": false }, + { "id": "f_egg_sacke", "fg": 252, "rotates": false }, + { "id": "f_egg_sackws", "fg": 251, "rotates": false }, + { "id": "f_ergometer", "fg": 255, "rotates": false }, + { "id": "f_exercise", "fg": 272, "rotates": false }, + { "id": "f_fema_groundsheet", "bg": 321, "rotates": false }, + { "id": "f_fireplace", "fg": 332, "rotates": false }, + { "id": "f_floor_canvas", "fg": 262, "rotates": false }, + { "id": "f_flower_fungal", "fg": 235, "rotates": false }, + { "id": "f_flower_marloss", "fg": 261, "rotates": false }, + { "id": "f_forge", "fg": 502, "rotates": false, "multitile": false }, + { "id": "f_fridge", "fg": 287, "rotates": false }, + { "id": "f_fungal_clump", "fg": 237, "rotates": false }, + { "id": "f_fungal_mass", "fg": 236, "rotates": false }, + { "id": "f_fvat_empty", "fg": 248, "rotates": false }, + { "id": "f_fvat_full", "fg": 249, "rotates": false }, + { "id": "f_glass_fridge", "fg": 288, "rotates": false }, + { "id": "f_groundsheet", "bg": 321, "rotates": false }, + { "id": "f_gunsafe_mj", "fg": 282, "rotates": false }, + { "id": "f_gunsafe_ml", "fg": 281, "rotates": false }, + { "id": "f_gun_safe_el", "fg": 281, "rotates": false }, + { "id": "f_hay", "fg": 302, "rotates": false }, + { "id": "f_indoor_plant", "fg": 271, "rotates": false }, + { "id": "f_indoor_plant_y", "fg": 244, "rotates": false }, + { "id": "f_kiln_empty", "fg": 505, "rotates": false, "multitile": false }, + { "id": "f_kiln_full", "fg": 776, "rotates": false, "multitile": false }, + { "id": "f_lane", "fg": 338, "rotates": true }, + { "id": "f_large_canvas_door", "fg": 316, "rotates": false }, + { "id": "f_large_canvas_door_o", "fg": 317, "rotates": false }, + { + "id": "f_large_canvas_wall", + "fg": 245, + "bg": [ ], + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 311 }, + { "id": "corner", "fg": 312 }, + { "id": "edge", "fg": 313 }, + { "id": "t_connection", "fg": 314 }, + { "id": "end_piece", "fg": 315 }, + { "id": "unconnected", "fg": 245 } + ], + "rotates": false + }, + { "id": "f_large_groundsheet", "bg": 321, "rotates": false }, + { "id": "f_locker", "fg": 286, "rotates": false }, + { "id": "f_makeshift_bed", "fg": 230, "rotates": false }, + { "id": "f_mutpoppy", "fg": 273, "rotates": false }, + { "id": "f_oven", "fg": 330, "rotates": false }, + { "id": "f_pinball_machine", "fg": 254, "rotates": false }, + { "id": "f_plant_harvest", "fg": 344, "rotates": false }, + { "id": "f_plant_mature", "fg": 343, "rotates": false }, + { "id": "f_plant_seedling", "fg": 342, "rotates": false }, + { "id": "f_plant_seed", "fg": 341, "rotates": false }, + { + "id": "f_pool_table", + "fg": 242, + "multitile": true, + "additional_tiles": [ { "id": "corner", "fg": 241 }, { "id": "t_connection", "fg": 242 } ], + "rotates": false + }, + { "id": "f_rack", "fg": 280, "rotates": false }, + { "id": "f_rubble", "bg": 1940, "rotates": false }, + { "id": "f_rubble_rock", "bg": 198, "rotates": false }, + { "id": "f_safe_c", "fg": 281, "rotates": false }, + { "id": "f_safe_l", "fg": 282, "rotates": false }, + { "id": "f_safe_o", "fg": 283, "rotates": false }, + { "id": "f_sandbag_half", "fg": 263, "rotates": false }, + { "id": "f_sandbag_wall", "fg": 264, "rotates": false }, + { "id": "f_shower", "fg": 340, "rotates": false }, + { "id": "f_sign", "fg": 238, "rotates": false }, + { "id": "f_sink", "fg": 233, "rotates": false }, + { "id": "f_skin_door", "fg": 319, "rotates": false }, + { "id": "f_skin_door_o", "fg": 320, "rotates": false }, + { "id": "f_skin_groundsheet", "fg": 339, "rotates": false }, + { + "id": "f_skin_wall", + "fg": 246, + "bg": [ ], + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 303 }, + { "id": "corner", "fg": 304 }, + { "id": "edge", "fg": 305 }, + { "id": "t_connection", "fg": 306 }, + { "id": "end_piece", "fg": 318 }, + { "id": "unconnected", "fg": 246 } + ], + "rotates": false + }, + { "id": "f_sofa", "fg": 240, "rotates": false }, + { "id": "f_standing_tank", "fg": 420, "rotates": false, "multitile": false }, + { "id": "f_statue", "fg": 243, "rotates": false }, + { "id": "f_still", "fg": 742, "rotates": false, "multitile": false }, + { "id": "f_straw_bed", "fg": 2103, "rotates": false }, + { + "id": "f_table", + "fg": 322, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2003 }, + { "id": "corner", "fg": 307 }, + { "id": "edge", "fg": 308 }, + { "id": "t_connection", "fg": 309 }, + { "id": "end_piece", "fg": 310 }, + { "id": "unconnected", "fg": 322 } + ], + "rotates": false + }, + { "id": "f_tatami", "fg": 339, "rotates": false }, + { "id": "f_toilet", "fg": 274, "rotates": false }, + { "id": "f_trashcan", "fg": 269, "rotates": false }, + { "id": "f_treadmill", "fg": 256, "rotates": false }, + { "id": "f_vending_c", "fg": 336, "rotates": false }, + { "id": "f_vending_o", "fg": 337, "rotates": false }, + { "id": "f_vending_reinforced", "fg": 239, "rotates": false }, + { "id": "f_washer", "fg": 299, "rotates": false }, + { "id": "f_woodstove", "fg": 331, "rotates": false }, + { "id": "f_wood_keg", "fg": 949, "rotates": false }, + { "id": "f_wreckage", "bg": 1977, "rotates": false }, + { "id": "10mm", "fg": 954, "rotates": false, "multitile": false }, + { "id": "120mm_HEAT", "fg": 959, "rotates": false, "multitile": false }, + { "id": "12mm", "fg": 955, "rotates": false, "multitile": false }, + { "id": "1cyl_combustion", "fg": 873, "rotates": false, "multitile": false }, + { "id": "1cyl_combustion_small", "fg": 873, "rotates": false, "multitile": false }, + { "id": "223", "fg": 954, "rotates": false, "multitile": false }, + { "id": "223_casing", "fg": 958 }, + { "id": "22_casing", "fg": 958 }, + { "id": "22_cb", "fg": 954, "rotates": false, "multitile": false }, + { "id": "22_fmj", "fg": 954, "rotates": false, "multitile": false }, + { "id": "22_lr", "fg": 954, "rotates": false, "multitile": false }, + { "id": "22_ratshot", "fg": 954, "rotates": false, "multitile": false }, + { "id": "270", "fg": 954, "rotates": false, "multitile": false }, + { "id": "2lcanteen", "fg": 349, "rotates": false, "multitile": false }, + { "id": "2x4", "fg": 549, "rotates": true }, + { "id": "2_shot_special", "fg": 517, "rotates": false, "multitile": false }, + { "id": "3006fmj", "fg": 954, "rotates": false, "multitile": false }, + { "id": "3006", "fg": 954, "rotates": false, "multitile": false }, + { "id": "3006_casing", "fg": 958 }, + { "id": "3006_incendiary", "fg": 954, "rotates": false, "multitile": false }, + { "id": "300_casing", "fg": 958 }, + { "id": "300_winmag", "fg": 954, "rotates": false, "multitile": false }, + { "id": "308", "fg": 954, "rotates": false, "multitile": false }, + { "id": "308_casing", "fg": 958 }, + { "id": "30gal_drum", "fg": 948, "rotates": false }, + { "id": "32_acp", "fg": 954, "rotates": false, "multitile": false }, + { "id": "32_casing", "fg": 958 }, + { "id": "38_casing", "fg": 958 }, + { "id": "38_fmj", "fg": 954, "rotates": false, "multitile": false }, + { "id": "38_special", "fg": 954, "rotates": false, "multitile": false }, + { "id": "38_super", "fg": 954, "rotates": false, "multitile": false }, + { "id": "40fmj", "fg": 954, "rotates": false, "multitile": false }, + { "id": "40mm_acidbomb", "fg": 959, "rotates": false, "multitile": false }, + { "id": "40mm_beanbag", "fg": 959, "rotates": false, "multitile": false }, + { "id": "40mm_casing", "fg": 958 }, + { "id": "40mm_concussive", "fg": 959, "rotates": false, "multitile": false }, + { "id": "40mm_flare", "fg": 959, "rotates": false, "multitile": false }, + { "id": "40mm_flashbang", "fg": 959, "rotates": false, "multitile": false }, + { "id": "40mm_flechette", "fg": 959, "rotates": false, "multitile": false }, + { "id": "40mm_frag", "fg": 959, "rotates": false, "multitile": false }, + { "id": "40mm_incendiary", "fg": 959, "rotates": false, "multitile": false }, + { "id": "40mm_shot", "fg": 959, "rotates": false, "multitile": false }, + { "id": "40mm_smoke", "fg": 959, "rotates": false, "multitile": false }, + { "id": "40mm_teargas", "fg": 959, "rotates": false, "multitile": false }, + { "id": "40sw", "fg": 954, "rotates": false, "multitile": false }, + { "id": "40_casing", "fg": 958 }, + { "id": "44fmj", "fg": 954, "rotates": false, "multitile": false }, + { "id": "44magnum", "fg": 954, "rotates": false, "multitile": false }, + { "id": "44_casing", "fg": 958 }, + { "id": "454_casing", "fg": 958 }, + { "id": "454_Casull", "fg": 954, "rotates": false, "multitile": false }, + { "id": "45_acp", "fg": 954, "rotates": false, "multitile": false }, + { "id": "45_casing", "fg": 958 }, + { "id": "45_jhp", "fg": 954, "rotates": false, "multitile": false }, + { "id": "45_super", "fg": 954, "rotates": false, "multitile": false }, + { "id": "46mm", "fg": 954, "rotates": false, "multitile": false }, + { "id": "46mm_casing", "fg": 958 }, + { "id": "500_casing", "fg": 958 }, + { "id": "500_Magnum", "fg": 954, "rotates": false, "multitile": false }, + { "id": "556", "fg": 954, "rotates": false, "multitile": false }, + { "id": "556_incendiary", "fg": 954, "rotates": false, "multitile": false }, + { "id": "55gal_drum", "fg": 947, "rotates": false }, + { "id": "57mm", "fg": 954, "rotates": false, "multitile": false }, + { "id": "57mm_casing", "fg": 958 }, + { "id": "5x50dart", "fg": 821, "rotates": false, "multitile": false }, + { "id": "5x50heavy", "fg": 821, "rotates": false, "multitile": false }, + { "id": "5x50hull", "fg": 821, "rotates": false, "multitile": false }, + { "id": "5x50_hull", "fg": 941 }, + { "id": "66mm_HEAT", "fg": 959, "rotates": false, "multitile": false }, + { "id": "700nx", "fg": 954, "rotates": false, "multitile": false }, + { "id": "700nx_casing", "fg": 958 }, + { "id": "762R_casing", "fg": 958 }, + { "id": "762_25", "fg": 954, "rotates": false, "multitile": false }, + { "id": "762_25", "fg": 954, "rotates": false, "multitile": false }, + { "id": "762_51", "fg": 954, "rotates": false, "multitile": false }, + { "id": "762_51_incendiary", "fg": 954, "rotates": false, "multitile": false }, + { "id": "762_54R", "fg": 954, "rotates": false, "multitile": false }, + { "id": "762_casing", "fg": 958 }, + { "id": "762_m43", "fg": 954, "rotates": false, "multitile": false }, + { "id": "762_m87", "fg": 954, "rotates": false, "multitile": false }, + { "id": "84x246mm_hedp", "fg": 959, "rotates": false, "multitile": false }, + { "id": "84x246mm_he", "fg": 959, "rotates": false, "multitile": false }, + { "id": "84x246mm_smoke", "fg": 959, "rotates": false, "multitile": false }, + { "id": "8mm_bootleg", "fg": 956, "rotates": false, "multitile": false }, + { "id": "8mm_bootleg_jsp", "fg": 956, "rotates": false, "multitile": false }, + { "id": "8mm_caseless", "fg": 956, "rotates": false, "multitile": false }, + { "id": "8mm_civilian", "fg": 956, "rotates": false, "multitile": false }, + { "id": "8mm_fmj", "fg": 956, "rotates": false, "multitile": false }, + { "id": "8mm_hvp", "fg": 956, "rotates": false, "multitile": false }, + { "id": "8mm_inc", "fg": 956, "rotates": false, "multitile": false }, + { "id": "8mm_jhp", "fg": 956, "rotates": false, "multitile": false }, + { "id": "9mmfmj", "fg": 954, "rotates": false, "multitile": false }, + { "id": "9mmP2", "fg": 954, "rotates": false, "multitile": false }, + { "id": "9mmP", "fg": 954, "rotates": false, "multitile": false }, + { "id": "9mm", "fg": 954, "rotates": false, "multitile": false }, + { "id": "9mm_casing", "fg": 958 }, + { "id": "acidbomb", "fg": 636, "rotates": false, "multitile": false }, + { "id": "acidbomb_act", "fg": 637, "rotates": false, "multitile": false }, + { "id": "acid", "fg": 931, "rotates": false, "multitile": false }, + { "id": "acr", "fg": 550, "rotates": false, "multitile": false }, + { "id": "adjustable_stock", "fg": 918, "rotates": false, "multitile": false }, + { "id": "adrenaline_injector", "fg": 748, "rotates": false, "multitile": false }, + { "id": "advanced_ecig", "fg": 372, "rotates": false, "multitile": false }, + { "id": "adv_UPS_off", "fg": 652, "rotates": false, "multitile": false }, + { "id": "adv_UPS_on", "fg": 653, "rotates": false, "multitile": false }, + { "id": "airhorn", "fg": 545, "rotates": false, "multitile": false }, + { "id": "airspeargun", "fg": 519, "rotates": false, "multitile": false }, + { "id": "ak47", "fg": 551, "rotates": false, "multitile": false }, + { "id": "alarmclock", "fg": 534, "rotates": false, "multitile": false }, + { "id": "alloy_plate", "fg": 461, "rotates": false, "multitile": false }, + { "id": "alloy_sheet", "fg": 461, "rotates": false, "multitile": false }, + { "id": "alternator_car", "fg": 1424, "rotates": false, "multitile": false }, + { "id": "alternator_motorbike", "fg": 1424, "rotates": false, "multitile": false }, + { "id": "alternator_truck", "fg": 1424, "rotates": false, "multitile": false }, + { "id": "american_180", "fg": 530, "rotates": false, "multitile": false }, + { "id": "ammonia", "fg": 931, "rotates": false, "multitile": false }, + { "id": "amplifier", "fg": 950, "rotates": false, "multitile": false }, + { "id": "ampoule", "fg": 452, "rotates": false, "multitile": false }, + { "id": "antenna", "fg": 372, "rotates": false, "multitile": false }, + { "id": "anvil", "fg": 751, "rotates": false, "multitile": false }, + { "id": "apple_cider", "fg": 1406, "rotates": false, "multitile": false }, + { "id": "ar15", "fg": 550, "rotates": false, "multitile": false }, + { "id": "arx160", "fg": 550, "rotates": false, "multitile": false }, + { "id": "ashot", "fg": 518, "rotates": false, "multitile": false }, + { "id": "atomic_coffeepot", "fg": 946, "rotates": false, "multitile": false }, + { "id": "atomic_coffee", "fg": 932, "rotates": false, "multitile": false }, + { "id": "atomic_light", "fg": 920, "rotates": false, "multitile": false }, + { "id": "autofire", "fg": 918, "rotates": false, "multitile": false }, + { "id": "aux_flamer", "fg": 918, "rotates": false, "multitile": false }, + { "id": "ax", "fg": 694, "rotates": false, "multitile": false }, + { "id": "bagh_nakha", "fg": 479, "rotates": false, "multitile": false }, + { "id": "bag_apple_vac", "fg": 1364, "rotates": false, "multitile": false }, + { "id": "bag_bundle_10", "fg": 499, "rotates": false, "multitile": false }, + { "id": "bag_canvas", "fg": 1354, "rotates": false, "multitile": false }, + { "id": "bag_canvas_small", "fg": 1354, "rotates": false, "multitile": false }, + { "id": "bag_fish_vac", "fg": 1401, "rotates": false, "multitile": false }, + { "id": "bag_hflesh_vac", "fg": 1362, "rotates": false, "multitile": false }, + { "id": "bag_meat_vac", "fg": 1362, "rotates": false, "multitile": false }, + { "id": "bag_plastic", "fg": 499, "rotates": false }, + { "id": "bag_veggy_vac", "fg": 1363, "rotates": false, "multitile": false }, + { "id": "barometer", "fg": 418, "rotates": false, "multitile": false }, + { "id": "barrel_big", "fg": 918, "rotates": false, "multitile": false }, + { "id": "barrel_ported", "fg": 918, "rotates": false, "multitile": false }, + { "id": "barrel_rifled", "fg": 918, "rotates": false, "multitile": false }, + { "id": "barrel_small", "fg": 918, "rotates": false, "multitile": false }, + { "id": "baseball", "fg": 921, "rotates": false, "multitile": false }, + { "id": "basket", "fg": 1469, "rotates": false }, + { "id": "baton-extended", "fg": 441, "rotates": false, "multitile": false }, + { "id": "baton", "fg": 441, "rotates": false, "multitile": false }, + { "id": "battery", "fg": 901, "rotates": false, "multitile": false }, + { "id": "battery_atomic", "fg": 541, "rotates": false, "multitile": false }, + { "id": "battery_car", "fg": 874, "rotates": false }, + { "id": "battery_compartment", "fg": 571, "rotates": false, "multitile": false }, + { "id": "battery_motorbike", "fg": 874, "rotates": false }, + { "id": "battery_truck", "fg": 874, "rotates": false }, + { "id": "battery_ups", "fg": 733, "rotates": false, "multitile": false }, + { "id": "battleaxe", "fg": 489, "rotates": false, "multitile": false }, + { "id": "battleaxe_fake", "fg": 489, "rotates": false, "multitile": false }, + { "id": [ "battleaxe_fake", "battleaxe_inferior", "battleaxe" ], "fg": 861, "rotates": false }, + { "id": "battletorch", "fg": 490, "rotates": false, "multitile": false }, + { "id": "battletorch_done", "fg": 480, "rotates": false, "multitile": false }, + { "id": "battletorch_lit", "fg": 491, "rotates": false, "multitile": false }, + { "id": "bat", "fg": 438, "rotates": false, "multitile": false }, + { "id": "bat_metal", "fg": 439, "rotates": false, "multitile": false }, + { "id": "bayonet", "fg": 918, "rotates": false, "multitile": false }, + { "id": "bbgun", "fg": 509, "rotates": false, "multitile": false }, + { "id": "bb", "fg": 902, "rotates": false, "multitile": false }, + { "id": "bearing", "fg": 902, "rotates": false, "multitile": false }, + { "id": "beartrap", "fg": 604, "rotates": false, "multitile": false }, + { "id": "beer", "fg": 932, "rotates": false, "multitile": false }, + { "id": "bee_sting", "fg": 442, "rotates": false, "multitile": false }, + { "id": "belgian_ale", "fg": 932, "rotates": false, "multitile": false }, + { "id": "bigun", "fg": 536, "rotates": false, "multitile": false }, + { "id": "binoculars", "fg": 385, "rotates": false, "multitile": false }, + { "id": "biollante_bud", "fg": 381, "rotates": false, "multitile": false }, + { "id": "bio_adrenaline", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_ads", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_alarm", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_ankles", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_armor_arms", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_armor_eyes", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_armor_head", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_armor_legs", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_armor_torso", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_batteries", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_blade", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_blade_weapon", "fg": 690, "rotates": false, "multitile": false }, + { "id": "bio_blaster", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_blood_anal", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_blood_filter", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_carbon", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_chain_lightning", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_claws", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_claws_weapon", "fg": 479, "rotates": false, "multitile": false }, + { "id": "bio_climate", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_cloak", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_cqb", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_deformity", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_dex_enhancer", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_digestion", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_dis_acid", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_dis_shock", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_drain", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_ears", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_emp", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_ethanol", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_evap", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_eye_enhancer", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_face_mask", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_faraday", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_fingerhack", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_flashbang", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_flashlight", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_furnace", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_geiger", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_gills", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_ground_sonar", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_heatsink", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_heat_absorb", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_hydraulics", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_infrared", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_int_enhancer", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_itchy", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_laser", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_leaky", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_leukocyte", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_lighter", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_lockpick", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_magnet", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_membrane", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_memory", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_metabolics", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_meteorologist", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_nanobots", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_night", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_night_vision", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_noise", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_nostril", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_null", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_ods", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_painkiller", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_pokedeye", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_power_armor_interface", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_power_armor_interface_mkII", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_power_storage", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_power_storage_mkII", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_power_weakness", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_probability_travel", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_purifier", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_radscrubber", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_railgun", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_razors", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_recycler", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_remote", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_resonator", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_scent_mask", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_scent_vision", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_shakes", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_shockwave", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_shock", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_sleepy", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_solar", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_spasm", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_speed", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_stiff", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_storage", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_str_enhancer", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_sunglasses", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_targeting", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_teleport", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_thumbs", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_time_freeze", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_tools", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_torsionratchet", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_trip", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_uncanny_dodge", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_ups", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_voice", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_watch", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bio_water_extractor", "fg": 1235, "rotates": false, "multitile": false }, + { "id": "bipod", "fg": 918, "rotates": false, "multitile": false }, + { "id": "bismuth", "fg": 904, "rotates": false, "multitile": false }, + { "id": "black_box", "fg": 589, "rotates": false, "multitile": false }, + { "id": "black_box_transcript", "fg": 899, "rotates": false, "multitile": false }, + { "id": "blade", "fg": 389, "rotates": false, "multitile": false }, + { "id": "blade_trap", "fg": 609, "rotates": false, "multitile": false }, + { "id": "bleach", "fg": 931, "rotates": false, "multitile": false }, + { "id": "blood", "fg": 1409, "rotates": false, "multitile": false }, + { "id": "blowback", "fg": 918, "rotates": false, "multitile": false }, + { "id": "blowgun", "fg": 424, "rotates": false, "multitile": false }, + { "id": "bluebell_bud", "fg": 375, "rotates": false, "multitile": false }, + { "id": "bluebell_flower", "fg": 870, "rotates": false, "multitile": false }, + { "id": "blunderbuss", "fg": 526, "rotates": false, "multitile": false }, + { "id": "blun_flechette", "fg": 953, "rotates": false, "multitile": false }, + { "id": "blun_shot", "fg": 953, "rotates": false, "multitile": false }, + { "id": "blun_slug", "fg": 953, "rotates": false, "multitile": false }, + { "id": "board_trap", "fg": 605, "rotates": false, "multitile": false }, + { "id": "bokken", "fg": 826, "rotates": false, "multitile": false }, + { "id": "boltcutters", "fg": 708, "rotates": false, "multitile": false }, + { "id": "bone_glue", "fg": 837, "rotates": false, "multitile": false }, + { "id": "bone_plate", "fg": 460, "rotates": false, "multitile": false }, + { "id": "boobytrap", "fg": 661, "rotates": false, "multitile": false }, + { "id": "bootstrap", "fg": 919, "rotates": false, "multitile": false }, + { "id": "bottle_glass", "fg": 511, "rotates": false }, + { "id": "bottle_plastic", "fg": 1395, "rotates": false }, + { "id": "bottle_plastic_small", "fg": 1395, "rotates": false }, + { "id": "bot_laserturret", "fg": 360, "rotates": false, "multitile": false }, + { "id": "bot_manhack", "fg": 648, "rotates": false, "multitile": false }, + { "id": "bot_rifleturret", "fg": 564, "rotates": false, "multitile": false }, + { "id": "bot_turret", "fg": 649, "rotates": false, "multitile": false }, + { "id": "bowling_axe", "fg": 780, "rotates": false, "multitile": false }, + { "id": "bowling_ball", "fg": 387, "rotates": false, "multitile": false }, + { "id": "bowling_pin", "fg": 779, "rotates": false, "multitile": false }, + { "id": "bowl_clay", "fg": 832, "rotates": false, "multitile": false }, + { "id": "bowl_pewter", "fg": 421, "rotates": false, "multitile": false }, + { "id": "bowl_plastic", "fg": 357, "rotates": false, "multitile": false }, + { "id": "bow_sight", "fg": 918, "rotates": false, "multitile": false }, + { "id": "box_small", "fg": 500, "rotates": false }, + { "id": "brass_catcher", "fg": 918, "rotates": false, "multitile": false }, + { "id": "brazier", "fg": 700, "rotates": false, "multitile": false }, + { "id": "brew_dandelion_wine", "fg": 1382, "rotates": false, "multitile": false }, + { "id": "brew_hb_beer", "fg": 932, "rotates": false, "multitile": false }, + { "id": "brew_mead", "fg": 1382, "rotates": false, "multitile": false }, + { "id": "brew_moonshine", "fg": 932, "rotates": false, "multitile": false }, + { "id": "brew_pine_wine", "fg": 1410, "rotates": false, "multitile": false }, + { "id": "brew_rum", "fg": 931, "rotates": false, "multitile": false }, + { "id": "brew_vinegar", "fg": 934, "rotates": false, "multitile": false }, + { "id": "brew_vodka", "fg": 931, "rotates": false, "multitile": false }, + { "id": "brew_whiskey", "fg": 932, "rotates": false, "multitile": false }, + { "id": "brick", "fg": 838, "rotates": false, "multitile": false }, + { "id": "brick_kiln", "fg": 505, "rotates": false, "multitile": false }, + { "id": "briefcase_smg", "fg": 918, "rotates": false, "multitile": false }, + { "id": "broadfire_off", "fg": 684, "rotates": false, "multitile": false }, + { "id": "broadfire_on", "fg": 685, "rotates": false, "multitile": false }, + { "id": "broadsword", "fg": 682, "rotates": false, "multitile": false }, + { "id": "broadsword_fake", "fg": 682, "rotates": false, "multitile": false }, + { "id": "broken_copbot", "fg": 734, "rotates": false }, + { "id": "broken_eyebot", "fg": 730, "rotates": false }, + { "id": "broken_manhack", "fg": 648, "rotates": false, "multitile": false }, + { "id": "broken_molebot", "fg": 735, "rotates": false }, + { "id": "broken_riotbot", "fg": 734, "rotates": false }, + { "id": "broken_skitterbot", "fg": 731, "rotates": false }, + { "id": "broken_tankbot", "fg": 739, "rotates": false }, + { "id": "broken_tripod", "fg": 736, "rotates": false }, + { "id": "broketent", "fg": 399, "rotates": false, "multitile": false }, + { "id": "broom", "fg": 431, "rotates": false, "multitile": false }, + { "id": "broth", "fg": 932, "rotates": false, "multitile": false }, + { "id": "broth_bone", "fg": 932, "rotates": false, "multitile": false }, + { "id": "browning_blr", "fg": 509, "rotates": false, "multitile": false }, + { "id": "bubblewrap", "fg": 603, "rotates": false, "multitile": false }, + { "id": "bullet_crossbow", "fg": 895, "rotates": false, "multitile": false }, + { "id": "bullwhip", "fg": 775, "rotates": false, "multitile": false }, + { "id": "bum_wine", "fg": 1409, "rotates": false, "multitile": false }, + { "id": "burnt_out_bionic", "fg": 371, "rotates": false, "multitile": false }, + { "id": "bwirebat", "fg": 490, "rotates": false, "multitile": false }, + { "id": "b_paint", "fg": 390, "rotates": false, "multitile": false }, + { "id": "c4armed", "fg": 663, "rotates": false, "multitile": false }, + { "id": "c4", "fg": 662, "rotates": false, "multitile": false }, + { "id": "cable", "fg": 887, "rotates": false, "multitile": false }, + { "id": "calico", "fg": 516, "rotates": false, "multitile": false }, + { "id": "caltrops", "fg": 898, "rotates": false }, + { "id": "camera_control", "fg": 1442, "rotates": false, "multitile": false }, + { "id": "candlestick", "fg": 388, "rotates": false, "multitile": false }, + { "id": "candle", "fg": 698, "rotates": false, "multitile": false }, + { "id": "candle_lit", "fg": 699, "rotates": false, "multitile": false }, + { "id": "cane", "fg": 444, "rotates": false, "multitile": false }, + { "id": "canister_empty", "fg": 590, "rotates": false, "multitile": false }, + { "id": "canister_goo", "fg": 616, "rotates": false, "multitile": false }, + { "id": "canteen", "fg": 349, "rotates": false, "multitile": false }, + { "id": "can_drink", "fg": 1393, "rotates": false, "multitile": false }, + { "id": "can_drink_unsealed", "fg": 858, "rotates": false }, + { "id": "can_food", "fg": 1394, "rotates": false, "multitile": false }, + { "id": "carbine_flintlock", "fg": 509, "rotates": false, "multitile": false }, + { "id": "carding_paddles", "fg": 431, "rotates": false, "multitile": false }, + { "id": "cargo_rack", "fg": 1481, "rotates": false }, + { "id": "carver_off", "fg": 691, "rotates": false, "multitile": false }, + { "id": "carver_on", "fg": 691, "rotates": false, "multitile": false }, + { "id": "cash_card", "fg": 368, "rotates": false, "multitile": false }, + { "id": "cattail_rhizome", "fg": 856, "rotates": false, "multitile": false }, + { "id": "cattail_stalk", "fg": 855, "rotates": false, "multitile": false }, + { "id": "cell_phone", "fg": 472, "rotates": false, "multitile": false }, + { "id": "ceramic_armor", "fg": 506, "rotates": false, "multitile": false }, + { "id": "ceramic_bowl", "fg": 408, "rotates": false, "multitile": false }, + { "id": "ceramic_cup", "fg": 409, "rotates": false, "multitile": false }, + { "id": "ceramic_plate", "fg": 407, "rotates": false, "multitile": false }, + { "id": "cerberus_laser", "fg": 557, "rotates": false, "multitile": false }, + { "id": "cestus", "fg": 456, "rotates": false, "multitile": false }, + { "id": "chainsaw_off", "fg": 599, "rotates": false, "multitile": false }, + { "id": "chainsaw_on", "fg": 599, "rotates": false, "multitile": false }, + { "id": "chain", "fg": 430, "rotates": false, "multitile": false }, + { "id": "charcoal", "fg": 908, "rotates": false, "multitile": false }, + { "id": "charge_shot", "fg": 893, "rotates": false, "multitile": false }, + { "id": "char_forge", "fg": 502, "rotates": false, "multitile": false }, + { "id": "char_kiln", "fg": 505, "rotates": false, "multitile": false }, + { "id": "char_purifier", "fg": 503, "rotates": false, "multitile": false }, + { "id": "char_smoker", "fg": 496, "rotates": false, "multitile": false }, + { "id": "chemistry_set", "fg": 744, "rotates": false, "multitile": false }, + { "id": "chemlab", "fg": 915, "rotates": false }, + { "id": "chem_acetic_acid", "fg": 931, "rotates": false, "multitile": false }, + { "id": "chem_acetone", "fg": 931, "rotates": false, "multitile": false }, + { "id": "chem_aluminium_powder", "fg": 908, "rotates": false, "multitile": false }, + { "id": "chem_aluminium_sulphate", "fg": 348, "rotates": false, "multitile": false }, + { "id": "chem_ammonium_nitrate", "fg": 348, "rotates": false, "multitile": false }, + { "id": "chem_black_powder", "fg": 908, "rotates": false, "multitile": false }, + { "id": "chem_carbide", "fg": 908, "rotates": false, "multitile": false }, + { "id": "chem_hmtd", "fg": 348, "rotates": false, "multitile": false }, + { "id": "chem_hydrogen_peroxide", "fg": 931, "rotates": false, "multitile": false }, + { "id": "chem_hydrogen_peroxide_conc", "fg": 931, "rotates": false, "multitile": false }, + { "id": "chem_nitric_acid", "fg": 931, "rotates": false, "multitile": false }, + { "id": "chem_rdx", "fg": 348, "rotates": false, "multitile": false }, + { "id": "chem_rocket_fuel", "fg": 908, "rotates": false, "multitile": false }, + { "id": "chem_saltpetre", "fg": 348, "rotates": false, "multitile": false }, + { "id": "chem_sulphuric_acid", "fg": 931, "rotates": false, "multitile": false }, + { "id": "chem_thermite", "fg": 908, "rotates": false, "multitile": false }, + { "id": "chem_zinc_powder", "fg": 908, "rotates": false, "multitile": false }, + { "id": "chipper", "fg": 753, "rotates": false, "multitile": false }, + { "id": "chisel", "fg": 753, "rotates": false, "multitile": false }, + { "id": "chitin_piece", "fg": 380, "rotates": false, "multitile": false }, + { "id": "chitin_plate", "fg": 461, "rotates": false, "multitile": false }, + { "id": "choc_drink", "fg": 1395, "rotates": false }, + { "id": "circsaw_blade", "fg": 419, "rotates": false, "multitile": false }, + { "id": "circsaw_off", "fg": 543, "rotates": false, "multitile": false }, + { "id": "circsaw_on", "fg": 543, "rotates": false, "multitile": false }, + { "id": "circuit", "fg": 950, "rotates": false, "multitile": false }, + { "id": "clay_canister", "fg": 833, "rotates": false, "multitile": false }, + { "id": "clay_pot", "fg": 834, "rotates": false, "multitile": false }, + { "id": "clay_quern", "fg": 839, "rotates": false, "multitile": false }, + { "id": "clay_teapot", "fg": 840, "rotates": false, "multitile": false }, + { "id": "clay_watercont", "fg": 834, "rotates": false, "multitile": false }, + { "id": "clip2", "fg": 918, "rotates": false, "multitile": false }, + { "id": "clip", "fg": 918, "rotates": false, "multitile": false }, + { "id": "clockworks", "fg": 419, "rotates": false, "multitile": false }, + { "id": "clock", "fg": 418, "rotates": false, "multitile": false }, + { "id": "clown_suit", "fg": 995, "rotates": false, "multitile": false }, + { "id": "coal", "fg": 382, "rotates": false, "multitile": false }, + { "id": "coffeemaker", "fg": 945, "rotates": false, "multitile": false }, + { "id": "coffee", "fg": 932, "rotates": false, "multitile": false }, + { "id": "coffee_syrup", "fg": 932, "rotates": false, "multitile": false }, + { "id": "coilgun", "fg": 555, "rotates": false, "multitile": false }, + { "id": "colamdew", "fg": 1406, "rotates": false, "multitile": false }, + { "id": "cola", "fg": 932, "rotates": false, "multitile": false }, + { "id": "colt_army", "fg": 518, "rotates": false, "multitile": false }, + { "id": "colt_navy", "fg": 518, "rotates": false, "multitile": false }, + { "id": "combatnail", "fg": 889, "rotates": false, "multitile": false }, + { "id": "combatsaw_off", "fg": 600, "rotates": false, "multitile": false }, + { "id": "combatsaw_on", "fg": 600, "rotates": false, "multitile": false }, + { "id": "compbow", "fg": 894, "rotates": false, "multitile": false }, + { "id": "compositebow", "fg": 894, "rotates": false, "multitile": false }, + { "id": "concrete", "fg": 1401, "rotates": false, "multitile": false }, + { + "id": "controls", + "fg": 881, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { "id": "control_laptop", "fg": 422, "rotates": false, "multitile": false }, + { "id": "conversion_battle", "fg": 918, "rotates": false, "multitile": false }, + { "id": "conversion_sniper", "fg": 918, "rotates": false, "multitile": false }, + { "id": "con_mix", "fg": 849, "rotates": false, "multitile": false }, + { "id": "cooking_oil", "fg": 1382, "rotates": false, "multitile": false }, + { "id": "copper", "fg": 822, "rotates": false, "multitile": false }, + { "id": "cop_38", "fg": 517, "rotates": false, "multitile": false }, + { "id": "cordless_drill", "fg": 732, "rotates": false, "multitile": false }, + { "id": "corpse", "fg": 864, "rotates": false }, + { "id": "cot", "fg": 667, "rotates": false, "multitile": false }, + { "id": "cow_bell", "fg": 546, "rotates": false, "multitile": false }, + { "id": "crackpipe", "fg": 745, "rotates": false, "multitile": false }, + { "id": "crafted_suppressor", "fg": 918, "rotates": false, "multitile": false }, + { "id": "craftrig", "fg": 1478, "rotates": true }, + { "id": "cranberry_juice", "fg": 1395, "rotates": false }, + { "id": "creamsoda", "fg": 934, "rotates": false, "multitile": false }, + { "id": "creepy_doll", "fg": 738, "rotates": false, "multitile": false }, + { "id": "crossbow", "fg": 895, "rotates": false, "multitile": false }, + { "id": "crossbow_trap", "fg": 607, "rotates": false, "multitile": false }, + { "id": "crowbar", "fg": 594, "rotates": false, "multitile": false }, + { "id": "crucible", "fg": 750, "rotates": false, "multitile": false }, + { "id": "crude_brick", "fg": 841, "rotates": false, "multitile": false }, + { "id": "crude_picklock", "fg": 711, "rotates": false, "multitile": false }, + { "id": "cs_lajatang_off", "fg": 486, "rotates": false, "multitile": false }, + { "id": "cs_lajatang_on", "fg": 486, "rotates": false, "multitile": false }, + { "id": "cudgel", "fg": 725, "rotates": false, "multitile": false }, + { "id": "cup_plastic", "fg": 912, "rotates": false, "multitile": false }, + { "id": "curry_veggy", "fg": 1409, "rotates": false, "multitile": false }, + { "id": "cu_pipe", "fg": 869, "rotates": false, "multitile": false }, + { "id": "cx4", "fg": 515, "rotates": false, "multitile": false }, + { "id": "c_fishspear", "fg": 678, "rotates": false, "multitile": false }, + { "id": "dahlia_bud", "fg": 469, "rotates": false, "multitile": false }, + { "id": "dahlia_flower", "fg": 910, "rotates": false, "multitile": false }, + { "id": "damaged_shelter_kit", "fg": 726, "rotates": false, "multitile": false }, + { "id": "dandelion_tea", "fg": 1382, "rotates": false, "multitile": false }, + { "id": "dandelion_wine", "fg": 1382, "rotates": false, "multitile": false }, + { "id": "dart", "fg": 890, "rotates": false, "multitile": false }, + { "id": "deagle_44", "fg": 518, "rotates": false, "multitile": false }, + { "id": "dehydrator", "fg": 497, "rotates": false, "multitile": false }, + { "id": "diamond", "fg": 540, "rotates": false, "multitile": false }, + { "id": "diamond_bayonet", "fg": 918, "rotates": false, "multitile": false }, + { "id": "diamond_broadsword", "fg": 847, "rotates": false, "multitile": false }, + { "id": "diamond_katana", "fg": 683, "rotates": false, "multitile": false }, + { "id": "diamond_knife", "fg": 688, "rotates": false, "multitile": false }, + { "id": "diamond_kukri", "fg": 683, "rotates": false, "multitile": false }, + { "id": "diamond_machete", "fg": 687, "rotates": false, "multitile": false }, + { "id": "diamond_nodachi", "fg": 683, "rotates": false, "multitile": false }, + { "id": "diamond_pistol_bayonet", "fg": 918, "rotates": false, "multitile": false }, + { "id": "diamond_rapier", "fg": 848, "rotates": false, "multitile": false }, + { "id": "diamond_sword_bayonet", "fg": 918, "rotates": false, "multitile": false }, + { "id": "diamond_wakizashi", "fg": 683, "rotates": false, "multitile": false }, + { "id": "diamond_zweihander", "fg": 847, "rotates": false, "multitile": false }, + { "id": "diesel", "fg": 934, "rotates": false, "multitile": false }, + { "id": "digging_stick", "fg": 424, "rotates": false, "multitile": false }, + { "id": "directional_antenna", "fg": 588, "rotates": false, "multitile": false }, + { "id": "distaff_spindle", "fg": 977, "rotates": false, "multitile": false }, + { "id": "diveknife", "fg": 690, "rotates": false, "multitile": false }, + { "id": "dogfood", "fg": 1375, "rotates": false, "multitile": false }, + { "id": "dog_whistle", "fg": 664, "rotates": false, "multitile": false }, + { "id": "door_opaque", "fg": 1456, "rotates": false }, + { "id": "doublespeargun", "fg": 526, "rotates": false, "multitile": false }, + { "id": "down_feather", "fg": 891, "rotates": false, "multitile": false }, + { "id": "drink_beeknees", "fg": 1382, "rotates": false, "multitile": false }, + { "id": "drink_hobo", "fg": 932, "rotates": false, "multitile": false }, + { "id": "drink_kalimotxo", "fg": 1409, "rotates": false, "multitile": false }, + { "id": "drink_rumcola", "fg": 932, "rotates": false, "multitile": false }, + { "id": "drink_screwdriver", "fg": 933, "rotates": false, "multitile": false }, + { "id": "drink_sewerbrew", "fg": 932, "rotates": false, "multitile": false }, + { "id": "drink_wild_apple", "fg": 1406, "rotates": false, "multitile": false }, + { "id": "drink_wsour", "fg": 1382, "rotates": false, "multitile": false }, + { "id": "drive_by_wire_controls", "fg": 1443, "rotates": false, "multitile": false }, + { "id": "DRUM", "fg": 359, "rotates": false, "multitile": false }, + { "id": "duct_tape", "fg": 900, "rotates": false, "multitile": false }, + { "id": "dump_pouch", "fg": 1230, "rotates": false, "multitile": false }, + { "id": "dynamite", "fg": 638, "rotates": false, "multitile": false }, + { "id": "dynamite_act", "fg": 639, "rotates": false, "multitile": false }, + { "id": "dynamite_radio", "fg": 800, "rotates": false, "multitile": false }, + { "id": "dynamite_radio_act", "fg": 801, "rotates": false, "multitile": false }, + { "id": "ear_spool", "fg": 943, "rotates": false, "multitile": false }, + { "id": "ecig", "fg": 373, "rotates": false, "multitile": false }, + { "id": "eink_tablet_pc", "fg": 718, "rotates": false, "multitile": false }, + { "id": "electrohack", "fg": 367, "rotates": false, "multitile": false }, + { "id": "elec_chainsaw_off", "fg": 599, "rotates": false, "multitile": false }, + { "id": "elec_chainsaw_on", "fg": 599, "rotates": false, "multitile": false }, + { "id": "elec_jackhammer", "fg": 601, "rotates": false, "multitile": false }, + { "id": "element", "fg": 400, "rotates": false, "multitile": false }, + { "id": "EMPbomb", "fg": 625, "rotates": false, "multitile": false }, + { "id": "EMPbomb_act", "fg": 626, "rotates": false, "multitile": false }, + { "id": "energy_drink", "fg": 1407, "rotates": false, "multitile": false }, + { "id": "energy_drink_atomic", "fg": 1406, "rotates": false, "multitile": false }, + { "id": "etched_skull", "fg": 659, "rotates": false, "multitile": false }, + { "id": "european_pilsner", "fg": 932, "rotates": false, "multitile": false }, + { "id": "explosive_hm_rocket", "fg": 823, "rotates": false, "multitile": false }, + { "id": "extinguisher", "fg": 570, "rotates": false, "multitile": false }, + { "id": "e_scrap", "fg": 951, "rotates": false, "multitile": false }, + { "id": "e_tool", "fg": 596, "rotates": false, "multitile": false }, + { "id": "fan", "fg": 406, "rotates": false, "multitile": false }, + { "id": "feather", "fg": 891, "rotates": false, "multitile": false }, + { "id": "felt_patch", "fg": 477, "rotates": false }, + { "id": "fencing_epee", "fg": 679, "rotates": false, "multitile": false }, + { "id": "fencing_foil", "fg": 679, "rotates": false, "multitile": false }, + { "id": "fencing_sabre", "fg": 679, "rotates": false, "multitile": false }, + { "id": "fertilizer", "fg": 1326, "rotates": false, "multitile": false }, + { "id": "fertilizer_bomb", "fg": 805, "rotates": false, "multitile": false }, + { "id": "fertilizer_bomb_act", "fg": 806, "rotates": false, "multitile": false }, + { "id": "fertilizer_liquid", "fg": 931, "rotates": false, "multitile": false }, + { "id": "fighter_sting", "fg": 481, "rotates": false, "multitile": false }, + { "id": "file", "fg": 899, "rotates": false, "multitile": false }, + { "id": "firecracker", "fg": 642, "rotates": false, "multitile": false }, + { "id": "firecracker_act", "fg": 643, "rotates": false, "multitile": false }, + { "id": "firecracker_pack", "fg": 640, "rotates": false, "multitile": false }, + { "id": "firecracker_pack_act", "fg": 641, "rotates": false, "multitile": false }, + { "id": "firekatana_off", "fg": 676, "rotates": false, "multitile": false }, + { "id": "firekatana_on", "fg": 677, "rotates": false, "multitile": false }, + { "id": "firemachete_off", "fg": 673, "rotates": false, "multitile": false }, + { "id": "firemachete_on", "fg": 674, "rotates": false, "multitile": false }, + { "id": "fire_ax", "fg": 487, "rotates": false, "multitile": false }, + { "id": "fire_drill", "fg": 565, "rotates": false, "multitile": false }, + { "id": "fire_drill_large", "fg": 565, "rotates": false, "multitile": false }, + { "id": "fishing_hook_basic", "fg": 532, "rotates": false, "multitile": false }, + { "id": "fishing_rod_basic", "fg": 531, "rotates": false, "multitile": false }, + { "id": "fishing_rod_professional", "fg": 808, "rotates": false, "multitile": false }, + { "id": "fishspear", "fg": 680, "rotates": false, "multitile": false }, + { "id": "fish_bowl", "fg": 475, "rotates": false, "multitile": false }, + { "id": "fish_trap", "fg": 584, "rotates": false, "multitile": false }, + { "id": "flamable_arrow", "fg": 633, "rotates": false, "multitile": false }, + { "id": "flamethrower", "fg": 558, "rotates": false, "multitile": false }, + { "id": "flamethrower_crude", "fg": 559, "rotates": false, "multitile": false }, + { "id": "flamethrower_simple", "fg": 558, "rotates": false, "multitile": false }, + { "id": "flaregun", "fg": 513, "rotates": false, "multitile": false }, + { "id": "flashbang", "fg": 623, "rotates": false, "multitile": false }, + { "id": "flashbang_act", "fg": 624, "rotates": false, "multitile": false }, + { "id": "flashlight", "fg": 574, "rotates": false, "multitile": false }, + { "id": "flashlight_on", "fg": 575, "rotates": false, "multitile": false }, + { "id": "flask_glass", "fg": 352, "rotates": false, "multitile": false }, + { "id": "flask_hip", "fg": 973, "rotates": false, "multitile": false }, + { "id": "flask_yeast", "fg": 352, "rotates": false, "multitile": false }, + { "id": "fletching", "fg": 892, "rotates": false, "multitile": false }, + { "id": "flintlock_ammo", "fg": 521, "rotates": false, "multitile": false }, + { "id": "floodlight", "fg": 1510, "rotates": false }, + { "id": "flyer", "fg": 899, "rotates": false, "multitile": false }, + { "id": "fn57", "fg": 518, "rotates": false, "multitile": false }, + { "id": "fn_fal", "fg": 551, "rotates": false, "multitile": false }, + { "id": "fn_p90", "fg": 536, "rotates": false, "multitile": false }, + { "id": "foldframe", "fg": 923, "rotates": false }, + { "id": "folding_basket", "fg": 842, "rotates": false }, + { "id": "folding_bicycle", "fg": 740, "rotates": false, "multitile": false }, + { "id": "foon", "fg": 414, "rotates": false, "multitile": false }, + { "id": "football", "fg": 922, "rotates": false, "multitile": false }, + { "id": "foot_crank", "fg": 453, "rotates": false, "multitile": false }, + { "id": "forgerig", "fg": 879, "rotates": false }, + { "id": "forge", "fg": 501, "rotates": false, "multitile": false }, + { "id": "fork", "fg": 414, "rotates": false, "multitile": false }, + { "id": "frame", "fg": 670, "rotates": false }, + { "id": "frame_wood", "fg": 925, "rotates": false }, + { "id": "frame_wood_light", "fg": 925, "rotates": false }, + { "id": "ftk93", "fg": 556, "rotates": false, "multitile": false }, + { "id": "funnel", "fg": 701, "rotates": false, "multitile": false }, + { "id": "fur_cat_tail", "fg": 523, "rotates": false }, + { "id": "gasbomb", "fg": 629, "rotates": false, "multitile": false }, + { "id": "gasbomb_act", "fg": 630, "rotates": false, "multitile": false }, + { "id": "gasdiscount_gold", "fg": 368, "rotates": false, "multitile": false }, + { "id": "gasdiscount_platinum", "fg": 820, "rotates": false, "multitile": false }, + { "id": "gasdiscount_silver", "fg": 820, "rotates": false, "multitile": false }, + { "id": "gasoline", "fg": 934, "rotates": false, "multitile": false }, + { "id": "gasoline_lantern", "fg": 927, "rotates": false, "multitile": false }, + { "id": "gasoline_lantern_on", "fg": 928, "rotates": false, "multitile": false }, + { "id": "geiger_off", "fg": 613, "rotates": false, "multitile": false }, + { "id": "geiger_on", "fg": 614, "rotates": false, "multitile": false }, + { "id": "generic_no_ammo", "fg": 953, "rotates": false, "multitile": false }, + { "id": "gin", "fg": 931, "rotates": false, "multitile": false }, + { "id": "glass", "fg": 412, "rotates": false, "multitile": false }, + { "id": "glass_bowl", "fg": 411, "rotates": false, "multitile": false }, + { "id": "glass_macuahuitl", "fg": 880, "rotates": false, "multitile": false }, + { "id": "glass_plate", "fg": 410, "rotates": false, "multitile": false }, + { "id": "glass_shard", "fg": 913, "rotates": false, "multitile": false }, + { "id": "glass_sheet", "fg": 376, "rotates": false, "multitile": false }, + { "id": "glass_shiv", "fg": 688, "rotates": false, "multitile": false }, + { "id": "glock_19", "fg": 518, "rotates": false, "multitile": false }, + { "id": "glowstick", "fg": 579, "rotates": false, "multitile": false }, + { "id": "glowstick_dead", "fg": 581, "rotates": false, "multitile": false }, + { "id": "glowstick_lit", "fg": 580, "rotates": false, "multitile": false }, + { "id": "gold", "fg": 1256, "rotates": false, "multitile": false }, + { "id": "gold_small", "fg": 905, "rotates": false, "multitile": false }, + { "id": "golf_club", "fg": 483, "rotates": false, "multitile": false }, + { "id": "granade", "fg": 621, "rotates": false, "multitile": false }, + { "id": "granade_act", "fg": 622, "rotates": false, "multitile": false }, + { "id": "grapnel", "fg": 774, "rotates": false, "multitile": false }, + { "id": "grenade", "fg": 619, "rotates": false, "multitile": false }, + { "id": "grenade_act", "fg": 620, "rotates": false, "multitile": false }, + { "id": "grenade_inc", "fg": 764, "rotates": false, "multitile": false }, + { "id": "grenade_inc_act", "fg": 765, "rotates": false, "multitile": false }, + { "id": "grip", "fg": 918, "rotates": false, "multitile": false }, + { "id": "GUITAR", "fg": 358, "rotates": false, "multitile": false }, + { "id": "gunpowder", "fg": 908, "rotates": false, "multitile": false }, + { "id": "gun_crossbow", "fg": 918, "rotates": false, "multitile": false }, + { "id": "g_carpet", "fg": 761, "rotates": false }, + { "id": "g_paint", "fg": 1397, "rotates": false, "multitile": false }, + { "id": "g_shovel", "fg": 596, "rotates": false, "multitile": false }, + { "id": "h&k416a5", "fg": 550, "rotates": false, "multitile": false }, + { "id": "hacksaw", "fg": 695, "rotates": false, "multitile": false }, + { "id": "halligan", "fg": 594, "rotates": false, "multitile": false }, + { "id": "hammer", "fg": 569, "rotates": false, "multitile": false }, + { "id": "hammer_sledge", "fg": 432, "rotates": false, "multitile": false }, + { "id": "handflare", "fg": 929, "rotates": false, "multitile": false }, + { "id": "handflare_dead", "fg": 938, "rotates": false, "multitile": false }, + { "id": "handflare_lit", "fg": 930, "rotates": false, "multitile": false }, + { "id": "hand_rims", "fg": 783, "rotates": false, "multitile": false }, + { "id": "hard_plate", "fg": 464, "rotates": false, "multitile": false }, + { "id": "hatchet", "fg": 694, "rotates": false, "multitile": false }, + { "id": "hb_beer", "fg": 932, "rotates": false, "multitile": false }, + { "id": "hdframe", "fg": 924, "rotates": false }, + { "id": "hd_steel_drum", "fg": 947, "rotates": false }, + { "id": "headlight_reinforced", "fg": 916, "rotates": false }, + { "id": "heatpack", "fg": 727, "rotates": false, "multitile": false }, + { "id": "heatpack_used", "fg": 728, "rotates": false, "multitile": false }, + { "id": "heavy_rail_rifle", "fg": 536, "rotates": false, "multitile": false }, + { "id": "heavy_snare_kit", "fg": 610, "rotates": false, "multitile": false }, + { "id": "helmet_chitin", "fg": 1145, "rotates": false, "multitile": false }, + { "id": "helmet_liner", "fg": 1142, "rotates": false, "multitile": false }, + { "id": "helmet_lobster", "fg": 1136, "rotates": false, "multitile": false }, + { "id": "helmet_lobster", "fg": 1003, "rotates": false, "multitile": false }, + { "id": "helmet_motor", "fg": 993, "rotates": false, "multitile": false }, + { "id": "helmet_netting", "fg": 1129, "rotates": false, "multitile": false }, + { "id": "helmet_nomad", "fg": 1142, "rotates": false, "multitile": false }, + { "id": "helmet_plate", "fg": 1146, "rotates": false, "multitile": false }, + { "id": "helmet_riot", "fg": 1143, "rotates": false, "multitile": false }, + { "id": "helmet_skid", "fg": 1139, "rotates": false, "multitile": false }, + { "id": "helsing", "fg": 536, "rotates": false, "multitile": false }, + { "id": "herbal_tea", "fg": 1410, "rotates": false, "multitile": false }, + { "id": "hk_g36", "fg": 550, "rotates": false, "multitile": false }, + { "id": "hk_g3", "fg": 550, "rotates": false, "multitile": false }, + { "id": "hk_g80", "fg": 556, "rotates": false, "multitile": false }, + { "id": "hk_mp5", "fg": 516, "rotates": false, "multitile": false }, + { "id": "hk_mp7", "fg": 516, "rotates": false, "multitile": false }, + { "id": "hk_ucp", "fg": 518, "rotates": false, "multitile": false }, + { "id": "hk_ump45", "fg": 516, "rotates": false, "multitile": false }, + { "id": "hockey_stick", "fg": 478, "rotates": false, "multitile": false }, + { "id": "hoe", "fg": 595, "rotates": false, "multitile": false }, + { "id": "holo_sight", "fg": 918, "rotates": false, "multitile": false }, + { "id": "holster", "fg": 1156, "rotates": false, "multitile": false }, + { "id": "holy_symbol", "fg": 1163, "rotates": false, "multitile": false }, + { "id": "homewrecker", "fg": 434, "rotates": false, "multitile": false }, + { "id": "honey_glassed", "fg": 416, "rotates": false, "multitile": false }, + { "id": "honey_gold", "fg": 1382, "rotates": false, "multitile": false }, + { "id": "honey_scraper", "fg": 690, "rotates": false, "multitile": false }, + { "id": "hood_fsurvivor", "fg": 1144, "rotates": false, "multitile": false }, + { "id": "hood_h20survivor", "fg": 1144, "rotates": false, "multitile": false }, + { "id": "hood_lsurvivor", "fg": 1188, "rotates": false, "multitile": false }, + { "id": "hood_survivor", "fg": 1190, "rotates": false, "multitile": false }, + { "id": "hood_xlsurvivor", "fg": 1190, "rotates": false, "multitile": false }, + { "id": "horn_bicycle", "fg": 875, "rotates": false }, + { "id": "horn_big", "fg": 875, "rotates": false }, + { "id": "horn_car", "fg": 875, "rotates": false }, + { "id": "hose", "fg": 598, "rotates": false, "multitile": false }, + { "id": "hotplate", "fg": 582, "rotates": false, "multitile": false }, + { "id": "house_coat", "fg": 1173, "rotates": false, "multitile": false }, + { "id": "hsurvivor_suit", "fg": 1201, "rotates": false, "multitile": false }, + { "id": "huge_crossbow", "fg": 895, "rotates": false, "multitile": false }, + { "id": "human_pickled", "fg": 1297, "rotates": false, "multitile": false }, + { "id": "hygrometer", "fg": 850, "rotates": false, "multitile": false }, + { "id": "i4_combustion", "fg": 873, "rotates": false, "multitile": false }, + { "id": "i6_diesel", "fg": 873, "rotates": false, "multitile": false }, + { "id": "id_military", "fg": 366, "rotates": false, "multitile": false }, + { "id": "id_science", "fg": 365, "rotates": false, "multitile": false }, + { "id": "imperial_stout", "fg": 932, "rotates": false, "multitile": false }, + { "id": "improve_sights", "fg": 918, "rotates": false, "multitile": false }, + { "id": "incendiary", "fg": 908, "rotates": false, "multitile": false }, + { "id": "incendiary_hm_rocket", "fg": 824, "rotates": false, "multitile": false }, + { "id": "india_pale_ale", "fg": 932, "rotates": false, "multitile": false }, + { "id": "irish_coffee", "fg": 932, "rotates": false, "multitile": false }, + { "id": "it_battery_mount", "fg": 571, "rotates": false, "multitile": false }, + { "id": "iv_mutagen", "fg": 1410, "rotates": false, "multitile": false }, + { "id": "iv_mutagen_alpha", "fg": 1410, "rotates": false, "multitile": false }, + { "id": "iv_mutagen_beast", "fg": 1410, "rotates": false, "multitile": false }, + { "id": "iv_mutagen_bird", "fg": 1410, "rotates": false, "multitile": false }, + { "id": "iv_mutagen_cattle", "fg": 1410, "rotates": false, "multitile": false }, + { "id": "iv_mutagen_cephalopod", "fg": 1410, "rotates": false, "multitile": false }, + { "id": "iv_mutagen_chimera", "fg": 1410, "rotates": false, "multitile": false }, + { "id": "iv_mutagen_elfa", "fg": 1410, "rotates": false, "multitile": false }, + { "id": "iv_mutagen_feline", "fg": 1410, "rotates": false, "multitile": false }, + { "id": "iv_mutagen_fish", "fg": 1410, "rotates": false, "multitile": false }, + { "id": "iv_mutagen_insect", "fg": 1410, "rotates": false, "multitile": false }, + { "id": "iv_mutagen_lizard", "fg": 1410, "rotates": false, "multitile": false }, + { "id": "iv_mutagen_lupine", "fg": 1410, "rotates": false, "multitile": false }, + { "id": "iv_mutagen_medical", "fg": 1410, "rotates": false, "multitile": false }, + { "id": "iv_mutagen_plant", "fg": 1410, "rotates": false, "multitile": false }, + { "id": "iv_mutagen_raptor", "fg": 1410, "rotates": false, "multitile": false }, + { "id": "iv_mutagen_rat", "fg": 1410, "rotates": false, "multitile": false }, + { "id": "iv_mutagen_slime", "fg": 1410, "rotates": false, "multitile": false }, + { "id": "iv_mutagen_spider", "fg": 1410, "rotates": false, "multitile": false }, + { "id": "iv_mutagen_troglobite", "fg": 1410, "rotates": false, "multitile": false }, + { "id": "iv_mutagen_ursine", "fg": 1410, "rotates": false, "multitile": false }, + { "id": "iv_purifier", "fg": 1407, "rotates": false, "multitile": false }, + { "id": "i_staff", "fg": 450, "rotates": false, "multitile": false }, + { "id": "jacket_chef", "fg": 1093, "rotates": false, "multitile": false }, + { "id": "jackhammer", "fg": 601, "rotates": false, "multitile": false }, + { "id": "jack", "fg": 504, "rotates": false, "multitile": false }, + { "id": "jacqueshammer", "fg": 602, "rotates": false, "multitile": false }, + { "id": "jar_3l_glass", "fg": 356, "rotates": false, "multitile": false }, + { "id": "jar_apple_canned", "fg": 1398, "rotates": false, "multitile": false }, + { "id": "jar_fish_canned", "fg": 1400, "rotates": false, "multitile": false }, + { "id": "jar_fish_pickled", "fg": 1400, "rotates": false, "multitile": false }, + { "id": "jar_glass", "fg": 355, "rotates": false, "multitile": false }, + { "id": "jar_human_canned", "fg": 1396, "rotates": false, "multitile": false }, + { "id": "jar_human_pickled", "fg": 1400, "rotates": false, "multitile": false }, + { "id": "jar_kompot", "fg": 355, "rotates": false, "multitile": false }, + { "id": "jar_meat_canned", "fg": 1396, "rotates": false, "multitile": false }, + { "id": "jar_meat_pickled", "fg": 1400, "rotates": false, "multitile": false }, + { "id": "jar_tomato_canned", "fg": 1396, "rotates": false, "multitile": false }, + { "id": "jar_veggy_canned", "fg": 1397, "rotates": false, "multitile": false }, + { "id": "jar_veggy_pickled", "fg": 1399, "rotates": false, "multitile": false }, + { "id": "javelin", "fg": 449, "rotates": false, "multitile": false }, + { "id": "javelin_iron", "fg": 680, "rotates": false, "multitile": false }, + { "id": "jerrycan", "fg": 350, "rotates": false, "multitile": false }, + { "id": "jerrycan_big", "fg": 354, "rotates": false, "multitile": false }, + { "id": "judo_belt_black", "fg": 1554, "rotates": false, "multitile": false }, + { "id": "judo_belt_blue", "fg": 1000, "rotates": false, "multitile": false }, + { "id": "judo_belt_brown", "fg": 1001, "rotates": false, "multitile": false }, + { "id": "judo_belt_green", "fg": 999, "rotates": false, "multitile": false }, + { "id": "judo_belt_orange", "fg": 998, "rotates": false, "multitile": false }, + { "id": "judo_belt_white", "fg": 996, "rotates": false, "multitile": false }, + { "id": "judo_belt_yellow", "fg": 997, "rotates": false, "multitile": false }, + { "id": "jug_clay", "fg": 835, "rotates": false, "multitile": false }, + { "id": "jug_plastic", "fg": 351, "rotates": false, "multitile": false }, + { "id": "juice", "fg": 933, "rotates": false, "multitile": false }, + { "id": "katana", "fg": 675, "rotates": false, "multitile": false }, + { "id": "katana_fake", "fg": 675, "rotates": false, "multitile": false }, + { "id": [ "katana", "katana_fake", "katana_inferior" ], "fg": 860, "rotates": false }, + { "id": "keg", "fg": 947, "rotates": false, "multitile": false }, + { "id": "kevlar_harness", "fg": 537, "rotates": false, "multitile": false }, + { "id": "kevlar_plate", "fg": 717, "rotates": false, "multitile": false }, + { "id": "kiln_done", "fg": 778, "rotates": false, "multitile": false }, + { "id": "kiln_full", "fg": 776, "rotates": false, "multitile": false }, + { "id": "kiln_lit", "fg": 777, "rotates": false, "multitile": false }, + { "id": "kitchen_unit", "fg": 865, "rotates": false, "multitile": false }, + { "id": "knife_butcher", "fg": 690, "rotates": false, "multitile": false }, + { "id": "knife_butter", "fg": 379, "rotates": false, "multitile": false }, + { "id": "knife_combat", "fg": 690, "rotates": false, "multitile": false }, + { "id": "knife_hunting", "fg": 690, "rotates": false, "multitile": false }, + { "id": "knife_rambo", "fg": 690, "rotates": false, "multitile": false }, + { "id": "knife_rm42", "fg": 690, "rotates": false, "multitile": false }, + { "id": "knife_steak", "fg": 690, "rotates": false, "multitile": false }, + { "id": "knife_swissarmy", "fg": 790, "rotates": false, "multitile": false }, + { "id": "knife_trench", "fg": 690, "rotates": false, "multitile": false }, + { "id": "knitting_needles", "fg": 424, "rotates": false, "multitile": false }, + { "id": "knuckle_brass", "fg": 398, "rotates": false, "multitile": false }, + { "id": "knuckle_katar", "fg": 479, "rotates": false, "multitile": false }, + { "id": "knuckle_nail", "fg": 479, "rotates": false, "multitile": false }, + { "id": "knuckle_steel", "fg": 476, "rotates": false, "multitile": false }, + { "id": "kompot", "fg": 931, "rotates": false, "multitile": false }, + { "id": "kris", "fg": 690, "rotates": false, "multitile": false }, + { "id": "kris_fake", "fg": 690, "rotates": false, "multitile": false }, + { "id": "kukri", "fg": 675, "rotates": false, "multitile": false }, + { "id": "lajatang", "fg": 470, "rotates": false, "multitile": false }, + { "id": "lamp_oil", "fg": 1382, "rotates": false, "multitile": false }, + { "id": "landmine", "fg": 612, "rotates": false, "multitile": false }, + { "id": "laptop", "fg": 405, "rotates": false, "multitile": false }, + { "id": "largebroketent", "fg": 399, "rotates": false, "multitile": false }, + { "id": "large_repairkit", "fg": 939, "rotates": false, "multitile": false }, + { "id": "large_tent_kit", "fg": 245, "rotates": false, "multitile": false }, + { "id": "laser_cannon", "fg": 557, "rotates": false, "multitile": false }, + { "id": "laser_capacitor", "fg": 901, "rotates": false, "multitile": false }, + { "id": "laser_pack", "fg": 907, "rotates": false, "multitile": false }, + { "id": "laser_rifle", "fg": 556, "rotates": false, "multitile": false }, + { "id": "laser_sight", "fg": 918, "rotates": false, "multitile": false }, + { "id": "launcher_simple", "fg": 560, "rotates": false, "multitile": false }, + { "id": "lawnmower", "fg": 397, "rotates": false, "multitile": false }, + { "id": "lawn_dart", "fg": 897, "rotates": false, "multitile": false }, + { "id": "LAW", "fg": 563, "rotates": false, "multitile": false }, + { "id": "LAW_Packed", "fg": 563, "rotates": false, "multitile": false }, + { "id": "lead", "fg": 904, "rotates": false, "multitile": false }, + { "id": "lead_plate", "fg": 459, "rotates": false, "multitile": false }, + { "id": "leather_cat_tail", "fg": 523, "rotates": false }, + { "id": "leather_funnel", "fg": 818, "rotates": false, "multitile": false }, + { "id": "lemonlime", "fg": 934, "rotates": false, "multitile": false }, + { "id": "lens", "fg": 370, "rotates": false, "multitile": false }, + { "id": "lgpistol_primer", "fg": 909, "rotates": false, "multitile": false }, + { "id": "lgrifle_primer", "fg": 909, "rotates": false, "multitile": false }, + { "id": "lighter", "fg": 868, "rotates": true }, + { "id": "lightstrip", "fg": 578, "rotates": false, "multitile": false }, + { "id": "lightstrip_dead", "fg": 576, "rotates": false, "multitile": false }, + { "id": "lightstrip_inactive", "fg": 577, "rotates": false, "multitile": false }, + { "id": "light_emergency_blue", "fg": 872, "rotates": false }, + { "id": "light_emergency_red", "fg": 871, "rotates": false }, + { "id": "light_snare_kit", "fg": 610, "rotates": false, "multitile": false }, + { "id": "lobotomizer", "fg": 851, "rotates": false, "multitile": false }, + { "id": "log", "fg": 393, "rotates": false, "multitile": false }, + { "id": "longbow", "fg": 894, "rotates": false, "multitile": false }, + { "id": "long_island", "fg": 932, "rotates": false, "multitile": false }, + { "id": "lye_powder", "fg": 348, "rotates": false, "multitile": false }, + { "id": "l_bak_223", "fg": 518, "rotates": false, "multitile": false }, + { "id": "l_base_223", "fg": 515, "rotates": false, "multitile": false }, + { "id": "l_car_223", "fg": 515, "rotates": false, "multitile": false }, + { "id": "l_car_223_kit", "fg": 918, "rotates": false, "multitile": false }, + { "id": "l_def_12", "fg": 528, "rotates": false, "multitile": false }, + { "id": "l_dsr_223", "fg": 515, "rotates": false, "multitile": false }, + { "id": "l_dsr_223_kit", "fg": 918, "rotates": false, "multitile": false }, + { "id": "l_enforcer_45", "fg": 518, "rotates": false, "multitile": false }, + { "id": "l_HFPack", "fg": 939, "rotates": false, "multitile": false }, + { "id": "l_lmg_223", "fg": 515, "rotates": false, "multitile": false }, + { "id": "l_lmg_223_kit", "fg": 918, "rotates": false, "multitile": false }, + { "id": "l_long_45", "fg": 509, "rotates": false, "multitile": false }, + { "id": "l_lookout_9mm", "fg": 518, "rotates": false, "multitile": false }, + { "id": "l_mbr_223", "fg": 515, "rotates": false, "multitile": false }, + { "id": "l_mbr_223_kit", "fg": 918, "rotates": false, "multitile": false }, + { "id": "l_mp_45", "fg": 518, "rotates": false, "multitile": false }, + { "id": "l_mp_9mm", "fg": 518, "rotates": false, "multitile": false }, + { "id": "l_sp_45", "fg": 518, "rotates": false, "multitile": false }, + { "id": "l_sp_9mm", "fg": 518, "rotates": false, "multitile": false }, + { "id": "m1014", "fg": 528, "rotates": false, "multitile": false }, + { "id": "m107a1", "fg": 550, "rotates": false, "multitile": false }, + { "id": "m14a", "fg": 509, "rotates": false, "multitile": false }, + { "id": "m14ebr", "fg": 515, "rotates": false, "multitile": false }, + { "id": "m1911", "fg": 518, "rotates": false, "multitile": false }, + { "id": "m2010", "fg": 515, "rotates": false, "multitile": false }, + { "id": "m202_flash", "fg": 563, "rotates": false, "multitile": false }, + { "id": "m203", "fg": 918, "rotates": false, "multitile": false }, + { "id": "m235tpa", "fg": 959, "rotates": false, "multitile": false }, + { "id": "m249", "fg": 554, "rotates": false, "multitile": false }, + { "id": "m27iar", "fg": 550, "rotates": false, "multitile": false }, + { "id": "m2browning", "fg": 528, "rotates": false, "multitile": false }, + { "id": "m2browning_sawn", "fg": 528, "rotates": false, "multitile": false }, + { "id": "m320", "fg": 560, "rotates": false, "multitile": false }, + { "id": "m320_mod", "fg": 918, "rotates": false, "multitile": false }, + { "id": "m3_carlgustav", "fg": 563, "rotates": false, "multitile": false }, + { "id": "m4a1", "fg": 550, "rotates": false, "multitile": false }, + { "id": "m79", "fg": 561, "rotates": false, "multitile": false }, + { "id": "m9", "fg": 518, "rotates": false, "multitile": false }, + { "id": "mace", "fg": 445, "rotates": false, "multitile": false }, + { "id": "machete", "fg": 672, "rotates": false, "multitile": false }, + { "id": "mac_10", "fg": 516, "rotates": false, "multitile": false }, + { "id": "magnifying_glass", "fg": 819, "rotates": false, "multitile": false }, + { "id": "makeshift_crowbar", "fg": 594, "rotates": false, "multitile": false }, + { "id": "makeshift_funnel", "fg": 702, "rotates": false, "multitile": false }, + { "id": "makeshift_halberd", "fg": 689, "rotates": false, "multitile": false }, + { "id": "makeshift_knife", "fg": 690, "rotates": false, "multitile": false }, + { "id": "makeshift_machete", "fg": 686, "rotates": false, "multitile": false }, + { "id": "manhole_cover", "fg": 1815, "rotates": false, "multitile": false }, + { "id": "marble", "fg": 902, "rotates": false, "multitile": false }, + { "id": "mark19", "fg": 528, "rotates": false, "multitile": false }, + { "id": "marlin_9a", "fg": 509, "rotates": false, "multitile": false }, + { "id": "masterkey", "fg": 918, "rotates": false, "multitile": false }, + { "id": "matchbomb", "fg": 547, "rotates": false, "multitile": false }, + { "id": "matchbomb_act", "fg": 548, "rotates": false, "multitile": false }, + { "id": "matches", "fg": 867, "rotates": true }, + { "id": "match_trigger", "fg": 918, "rotates": false, "multitile": false }, + { "id": "material_cement", "fg": 908, "rotates": false, "multitile": false }, + { "id": "material_limestone", "fg": 904, "rotates": false, "multitile": false }, + { "id": "material_shrd_limestone", "fg": 793, "rotates": false, "multitile": false }, + { "id": "mead", "fg": 1382, "rotates": false, "multitile": false }, + { "id": "meat_pickled", "fg": 1297, "rotates": false, "multitile": false }, + { "id": "medical_gauze", "fg": 737, "rotates": false, "multitile": false }, + { "id": "medical_tape", "fg": 900, "rotates": false, "multitile": false }, + { "id": "medium_storage_battery", "fg": 874, "rotates": false }, + { "id": "mess_kit", "fg": 791, "rotates": false, "multitile": false }, + { "id": "metal_smoother", "fg": 389, "rotates": false, "multitile": false }, + { "id": "metal_tank", "fg": 454, "rotates": false, "multitile": false }, + { "id": "metal_tank_little", "fg": 454, "rotates": false, "multitile": false }, + { "id": "metal_tank_small", "fg": 454, "rotates": false, "multitile": false }, + { "id": "mgl", "fg": 554, "rotates": false, "multitile": false }, + { "id": "microwave", "fg": 404, "rotates": false, "multitile": false }, + { "id": "militarymap", "fg": 593, "rotates": false, "multitile": false }, + { "id": "milk", "fg": 1408, "rotates": false, "multitile": false }, + { "id": "mil_mess_kit", "fg": 791, "rotates": false, "multitile": false }, + { "id": "mil_plate", "fg": 462, "rotates": false, "multitile": false }, + { "id": "minifridge", "fg": 866, "rotates": false }, + { "id": "mininuke", "fg": 644, "rotates": false, "multitile": false }, + { "id": "mininuke_act", "fg": 645, "rotates": false, "multitile": false }, + { "id": "mininuke_launcher", "fg": 563, "rotates": false, "multitile": false }, + { "id": "mininuke_mod", "fg": 644, "rotates": false, "multitile": false }, + { "id": "minireactor", "fg": 455, "rotates": false, "multitile": false }, + { "id": "minispeargun", "fg": 514, "rotates": false, "multitile": false }, + { "id": "mirror", "fg": 719, "rotates": false, "multitile": false }, + { "id": "misc_repairkit", "fg": 939, "rotates": false, "multitile": false }, + { "id": "mjolnir", "fg": 446, "rotates": false, "multitile": false }, + { "id": "mobile_memory_card", "fg": 794, "rotates": false, "multitile": false }, + { "id": "mobile_memory_card_encrypted", "fg": 794, "rotates": false, "multitile": false }, + { "id": "mobile_memory_card_science", "fg": 794, "rotates": false, "multitile": false }, + { "id": "mobile_memory_card_used", "fg": 794, "rotates": false, "multitile": false }, + { "id": "molasses", "fg": 932, "rotates": false, "multitile": false }, + { "id": "mold_plastic", "fg": 743, "rotates": false, "multitile": false }, + { "id": "molotov", "fg": 634, "rotates": false, "multitile": false }, + { "id": "molotov_lit", "fg": 635, "rotates": false, "multitile": false }, + { "id": "money_bundle", "fg": 498, "rotates": false }, + { "id": "moonshine", "fg": 932, "rotates": false, "multitile": false }, + { "id": "mop", "fg": 709, "rotates": false, "multitile": false }, + { "id": "morningstar", "fg": 446, "rotates": false, "multitile": false }, + { "id": "mortar_build", "fg": 1401, "rotates": false, "multitile": false }, + { "id": "mosin44", "fg": 509, "rotates": false, "multitile": false }, + { "id": "mosin91_30", "fg": 509, "rotates": false, "multitile": false }, + { "id": "mossberg_500", "fg": 528, "rotates": false, "multitile": false }, + { "id": "moss_brownie", "fg": 517, "rotates": false, "multitile": false }, + { "id": "motor", "fg": 451, "rotates": false, "multitile": false }, + { "id": "motor_large", "fg": 451, "rotates": false, "multitile": false }, + { "id": "motor_small", "fg": 451, "rotates": false, "multitile": false }, + { "id": "mp3", "fg": 655, "rotates": false, "multitile": false }, + { "id": "mp3_on", "fg": 656, "rotates": false, "multitile": false }, + { "id": "muffler", "fg": 436, "rotates": false, "multitile": false }, + { "id": "multitool", "fg": 790, "rotates": false, "multitile": false }, + { "id": "multi_cooker", "fg": 1565, "rotates": false, "multitile": false }, + { "id": "music_cd", "fg": 773, "rotates": false }, + { "id": "mutagen", "fg": 1304, "rotates": false, "multitile": false }, + { "id": "mutagen_alpha", "fg": 1304, "rotates": false, "multitile": false }, + { "id": "mutagen_beast", "fg": 1304, "rotates": false, "multitile": false }, + { "id": "mutagen_bird", "fg": 1304, "rotates": false, "multitile": false }, + { "id": "mutagen_cattle", "fg": 1304, "rotates": false, "multitile": false }, + { "id": "mutagen_cephalopod", "fg": 1304, "rotates": false, "multitile": false }, + { "id": "mutagen_chimera", "fg": 1304, "rotates": false, "multitile": false }, + { "id": "mutagen_elfa", "fg": 1304, "rotates": false, "multitile": false }, + { "id": "mutagen_feline", "fg": 1304, "rotates": false, "multitile": false }, + { "id": "mutagen_fish", "fg": 1304, "rotates": false, "multitile": false }, + { "id": "mutagen_insect", "fg": 1304, "rotates": false, "multitile": false }, + { "id": "mutagen_lizard", "fg": 1304, "rotates": false, "multitile": false }, + { "id": "mutagen_lupine", "fg": 1304, "rotates": false, "multitile": false }, + { "id": "mutagen_medical", "fg": 1304, "rotates": false, "multitile": false }, + { "id": "mutagen_plant", "fg": 1304, "rotates": false, "multitile": false }, + { "id": "mutagen_raptor", "fg": 1304, "rotates": false, "multitile": false }, + { "id": "mutagen_rat", "fg": 1304, "rotates": false, "multitile": false }, + { "id": "mutagen_slime", "fg": 1304, "rotates": false, "multitile": false }, + { "id": "mutagen_spider", "fg": 1304, "rotates": false, "multitile": false }, + { "id": "mutagen_troglobite", "fg": 1304, "rotates": false, "multitile": false }, + { "id": "mutagen_ursine", "fg": 1304, "rotates": false, "multitile": false }, + { "id": "muzzle_brake", "fg": 918, "rotates": false, "multitile": false }, + { "id": "m_fishspear", "fg": 678, "rotates": false, "multitile": false }, + { "id": "nailbat", "fg": 434, "rotates": false, "multitile": false }, + { "id": "nailboard", "fg": 433, "rotates": false, "multitile": false }, + { "id": "nailgun", "fg": 507, "rotates": false, "multitile": false }, + { "id": "nailrifle", "fg": 508, "rotates": false, "multitile": false }, + { "id": "nail", "fg": 889, "rotates": false, "multitile": false }, + { "id": "napalm", "fg": 937, "rotates": false, "multitile": false }, + { "id": "needlegun", "fg": 516, "rotates": false, "multitile": false }, + { "id": "needlepistol", "fg": 518, "rotates": false, "multitile": false }, + { "id": "needle_bone", "fg": 721, "rotates": false, "multitile": false }, + { "id": "needle_wood", "fg": 544, "rotates": false, "multitile": false }, + { "id": "nicotine_liquid", "fg": 715, "rotates": false, "multitile": false }, + { "id": "nic_gum", "fg": 1256, "rotates": false, "multitile": false }, + { "id": "nodachi", "fg": 675, "rotates": false, "multitile": false }, + { "id": "nodachi_fake", "fg": 675, "rotates": false, "multitile": false }, + { "id": "noise_emitter", "fg": 591, "rotates": false, "multitile": false }, + { "id": "noise_emitter_on", "fg": 592, "rotates": false, "multitile": false }, + { "id": "nomex", "fg": 477, "rotates": false }, + { "id": "nx17", "fg": 556, "rotates": false, "multitile": false }, + { "id": "oil_lamp", "fg": 927, "rotates": false, "multitile": false }, + { "id": "oil_lamp_on", "fg": 928, "rotates": false, "multitile": false }, + { "id": "oj", "fg": 933, "rotates": false, "multitile": false }, + { "id": "omnicamera", "fg": 1444, "rotates": false }, + { "id": "orangesoda", "fg": 933, "rotates": false, "multitile": false }, + { "id": "oxy_powder", "fg": 908, "rotates": false, "multitile": false }, + { "id": "oxy_torch", "fg": 666, "rotates": false, "multitile": false }, + { "id": "paint_brush", "fg": 445, "rotates": false, "multitile": false }, + { "id": "pale_ale", "fg": 932, "rotates": false, "multitile": false }, + { "id": "panties", "fg": 1223, "rotates": false, "multitile": false }, + { "id": "pan", "fg": 378, "rotates": false, "multitile": false }, + { "id": "paper", "fg": 899, "rotates": false, "multitile": false }, + { "id": "pastaextruder", "fg": 533, "rotates": false, "multitile": false }, + { "id": "pda", "fg": 718, "rotates": false, "multitile": false }, + { "id": "pda_flashlight", "fg": 719, "rotates": false, "multitile": false }, + { "id": "pearl_collar", "fg": 983, "rotates": false, "multitile": false }, + { "id": "pebble", "fg": 902, "rotates": false, "multitile": false }, + { "id": "peephole", "fg": 807, "rotates": false, "multitile": false }, + { "id": "pepper", "fg": 908, "rotates": false, "multitile": false }, + { "id": "permanent_marker", "fg": 714, "rotates": false, "multitile": false }, + { "id": "petrified_eye", "fg": 383, "rotates": false, "multitile": false }, + { "id": "pheromone", "fg": 646, "rotates": false, "multitile": false }, + { "id": "pickaxe", "fg": 712, "rotates": false, "multitile": false }, + { "id": "pickelhaube", "fg": 1136, "rotates": false, "multitile": false }, + { "id": "picklocks", "fg": 710, "rotates": false, "multitile": false }, + { "id": "pike", "fg": 680, "rotates": false, "multitile": false }, + { "id": "pillow", "fg": 792, "rotates": false, "multitile": false }, + { "id": "pilot_light", "fg": 402, "rotates": false, "multitile": false }, + { "id": "pinecone", "fg": 785, "rotates": false }, + { "id": "pine_tea", "fg": 1406, "rotates": false, "multitile": false }, + { "id": "pine_wine", "fg": 1304, "rotates": false, "multitile": false }, + { "id": "pipebomb", "fg": 617, "rotates": false, "multitile": false }, + { "id": "pipebomb_act", "fg": 618, "rotates": false, "multitile": false }, + { "id": "pipebomb_radio", "fg": 798, "rotates": false, "multitile": false }, + { "id": "pipebomb_radio_act", "fg": 799, "rotates": false, "multitile": false }, + { "id": "pipe", "fg": 468, "rotates": false }, + { "id": "pipe_double_shotgun", "fg": 526, "rotates": false, "multitile": false }, + { "id": "pipe_glass", "fg": 746, "rotates": false, "multitile": false }, + { "id": "pipe_launcher40mm", "fg": 918, "rotates": false, "multitile": false }, + { "id": "pipe_shotgunsawn", "fg": 1800, "rotates": false, "multitile": false }, + { "id": "pipe_shotgun", "fg": 1799, "rotates": false, "multitile": false }, + { "id": "pipe_tobacco", "fg": 747, "rotates": false, "multitile": false }, + { "id": "pistol_bayonet", "fg": 918, "rotates": false, "multitile": false }, + { "id": "pistol_flintlock", "fg": 517, "rotates": false, "multitile": false }, + { "id": "pistol_grip", "fg": 918, "rotates": false, "multitile": false }, + { "id": "pistol_scope", "fg": 918, "rotates": false, "multitile": false }, + { "id": "pistol_stock", "fg": 918, "rotates": false, "multitile": false }, + { "id": "pitchfork", "fg": 843, "rotates": false, "multitile": false }, + { "id": "plant_fibre", "fg": 886, "rotates": false, "multitile": false }, + { "id": "plasma", "fg": 893, "rotates": false, "multitile": false }, + { "id": "plasma_engine", "fg": 451, "rotates": false, "multitile": false }, + { "id": "plasma_rifle", "fg": 556, "rotates": false, "multitile": false }, + { "id": "plastic_chunk", "fg": 716, "rotates": false, "multitile": false }, + { "id": "plut_cell", "fg": 888, "rotates": false, "multitile": false }, + { "id": "pocketwatch", "fg": 473, "rotates": false, "multitile": false }, + { "id": "pockknife", "fg": 720, "rotates": false, "multitile": false }, + { "id": "pointy_stick", "fg": 424, "rotates": false, "multitile": false }, + { "id": "pool_ball", "fg": 387, "rotates": false, "multitile": false }, + { "id": "pool_cue", "fg": 424, "rotates": false, "multitile": false }, + { "id": "poppysyrup", "fg": 1407, "rotates": false, "multitile": false }, + { "id": "poppy_bud", "fg": 469, "rotates": false, "multitile": false }, + { "id": "poppy_flower", "fg": 467, "rotates": false, "multitile": false }, + { "id": "porkpie", "fg": 1148, "rotates": false, "multitile": false }, + { "id": "portable_game", "fg": 657, "rotates": false, "multitile": false }, + { "id": "portal", "fg": 647, "rotates": false, "multitile": false }, + { "id": "pot", "fg": 420, "rotates": false, "multitile": false }, + { "id": "power_supply", "fg": 951, "rotates": false, "multitile": false }, + { "id": "ppshdrum", "fg": 862, "rotates": false }, + { "id": [ "ppshmag", "tokarevmag" ], "fg": 863, "rotates": false }, + { "id": "ppsh", "fg": 530, "rotates": false, "multitile": false }, + { "id": "PR24-extended", "fg": 435, "rotates": false, "multitile": false }, + { "id": "PR24-retracted", "fg": 435, "rotates": false, "multitile": false }, + { "id": "press", "fg": 704, "rotates": false, "multitile": false }, + { "id": "primitive_axe", "fg": 723, "rotates": false, "multitile": false }, + { "id": "primitive_hammer", "fg": 722, "rotates": false, "multitile": false }, + { "id": "primitive_knife", "fg": 690, "rotates": false, "multitile": false }, + { "id": "primitive_shovel", "fg": 724, "rotates": false, "multitile": false }, + { "id": "processor", "fg": 950, "rotates": false, "multitile": false }, + { "id": "protein_shake", "fg": 1382, "rotates": false, "multitile": false }, + { "id": "puck", "fg": 943, "rotates": false, "multitile": false }, + { "id": "puller", "fg": 703, "rotates": false, "multitile": false }, + { "id": "punch_dagger", "fg": 482, "rotates": false, "multitile": false }, + { "id": "purifier", "fg": 937, "rotates": false, "multitile": false }, + { "id": "purple_drink", "fg": 1395, "rotates": false }, + { "id": "p_carpet", "fg": 763, "rotates": false }, + { "id": "p_paint", "fg": 392, "rotates": false, "multitile": false }, + { "id": "q_staff", "fg": 429, "rotates": false, "multitile": false }, + { "id": "radiocontrol", "fg": 804, "rotates": false, "multitile": false }, + { "id": "radio", "fg": 586, "rotates": false, "multitile": false }, + { "id": "radio_car", "fg": 802, "rotates": false, "multitile": false }, + { "id": "radio_car_box", "fg": 573, "rotates": false, "multitile": false }, + { "id": "radio_car_on", "fg": 803, "rotates": false, "multitile": false }, + { "id": "radio_on", "fg": 587, "rotates": false, "multitile": false }, + { "id": "rad_monitor", "fg": 984, "rotates": false, "multitile": false }, + { "id": "raging_bull", "fg": 518, "rotates": false, "multitile": false }, + { "id": "ragpouch", "fg": 1159, "rotates": false, "multitile": false }, + { "id": "rag", "fg": 477, "rotates": false }, + { "id": "rag_bloody", "fg": 417, "rotates": false, "multitile": false }, + { "id": "rail_laser_sight", "fg": 918, "rotates": false, "multitile": false }, + { "id": "RAM", "fg": 950, "rotates": false, "multitile": false }, + { "id": "rapier", "fg": 679, "rotates": false, "multitile": false }, + { "id": "rapier_fake", "fg": 679, "rotates": false, "multitile": false }, + { "id": "raw_fur", "fg": 810, "rotates": false, "multitile": false }, + { "id": "raw_leather", "fg": 811, "rotates": false, "multitile": false }, + { "id": "razor_blade", "fg": 539, "rotates": false, "multitile": false }, + { "id": "rebar", "fg": 466, "rotates": false, "multitile": false }, + { "id": "rebar_rail", "fg": 906, "rotates": false, "multitile": false }, + { "id": "rebar_rifle", "fg": 526, "rotates": false, "multitile": false }, + { "id": "rebreather", "fg": 1116, "rotates": false, "multitile": false }, + { "id": "rebreather_filter", "fg": 893, "rotates": false, "multitile": false }, + { "id": "rebreather_on", "fg": 1116, "rotates": false, "multitile": false }, + { "id": "rebreather_xl", "fg": 1116, "rotates": false, "multitile": false }, + { "id": "rebreather_xl_on", "fg": 1116, "rotates": false, "multitile": false }, + { "id": "receiver", "fg": 950, "rotates": false, "multitile": false }, + { "id": "rechargeable_battery", "fg": 907, "rotates": false, "multitile": false }, + { "id": "recharge_station", "fg": 917, "rotates": false }, + { "id": "recoil_stock", "fg": 918, "rotates": false, "multitile": false }, + { "id": "recurbow", "fg": 894, "rotates": false, "multitile": false }, + { "id": "red_dot_sight", "fg": 918, "rotates": false, "multitile": false }, + { "id": "reflexbow", "fg": 894, "rotates": false, "multitile": false }, + { "id": "reflexrecurvebow", "fg": 894, "rotates": false, "multitile": false }, + { "id": "ref_lighter", "fg": 756, "rotates": false, "multitile": false }, + { "id": "ref_lighter_on", "fg": 782, "rotates": false, "multitile": false }, + { "id": "reinforced_glass_pane", "fg": 377, "rotates": false, "multitile": false }, + { "id": "reinforced_glass_sheet", "fg": 377, "rotates": false, "multitile": false }, + { "id": "reinforced_solar_panel", "fg": 877, "rotates": false, "multitile": false }, + { "id": "reinforced_solar_panel_v2", "fg": 877, "rotates": false }, + { "id": "reloaded_10mm", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_223", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_270", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_3006", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_3006_incendiary", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_300_winmag", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_308", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_32_acp", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_38_fmj", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_38_special", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_38_super", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_40fmj", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_40mm_flechette", "fg": 959, "rotates": false, "multitile": false }, + { "id": "reloaded_40mm_shot", "fg": 959, "rotates": false, "multitile": false }, + { "id": "reloaded_40sw", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_44fmj", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_44magnum", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_454_Casull", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_45_acp", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_45_jhp", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_45_super", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_46mm", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_500_Magnum", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_50bmg", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_50ss", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_50_incendiary", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_556", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_556_incendiary", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_57mm", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_5x50dart", "fg": 821, "rotates": false, "multitile": false }, + { "id": "reloaded_700nx", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_762_51", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_762_51_incendiary", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_762_54R", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_762_m43", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_762_m87", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_9mmfmj", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_9mmP2", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_9mmP", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_9mmP", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_9mm", "fg": 954, "rotates": false, "multitile": false }, + { "id": "reloaded_laser_pack", "fg": 907, "rotates": false, "multitile": false }, + { "id": "reloaded_shot_00", "fg": 953, "rotates": false, "multitile": false }, + { "id": "reloaded_shot_beanbag", "fg": 953, "rotates": false, "multitile": false }, + { "id": "reloaded_shot_bird", "fg": 953, "rotates": false, "multitile": false }, + { "id": "reloaded_shot_flechette", "fg": 953, "rotates": false, "multitile": false }, + { "id": "reloaded_shot_he", "fg": 953, "rotates": false, "multitile": false }, + { "id": "reloaded_shot_slug", "fg": 953, "rotates": false, "multitile": false }, + { "id": "reloaded_signal_flare", "fg": 953, "rotates": false, "multitile": false }, + { "id": "remington_700", "fg": 509, "rotates": false, "multitile": false }, + { "id": "remington_870", "fg": 528, "rotates": false, "multitile": false }, + { "id": "remotevehcontrol", "fg": 804, "rotates": false, "multitile": false }, + { "id": "rep_crossbow", "fg": 895, "rotates": false, "multitile": false }, + { "id": "restaurantmap", "fg": 593, "rotates": false, "multitile": false }, + { "id": "retool_223", "fg": 918, "rotates": false, "multitile": false }, + { "id": "retool_22", "fg": 918, "rotates": false, "multitile": false }, + { "id": "retool_308", "fg": 918, "rotates": false, "multitile": false }, + { "id": "retool_45", "fg": 918, "rotates": false, "multitile": false }, + { "id": "retool_46", "fg": 918, "rotates": false, "multitile": false }, + { "id": "retool_57", "fg": 918, "rotates": false, "multitile": false }, + { "id": "retool_9mm", "fg": 918, "rotates": false, "multitile": false }, + { "id": "revolver_shotgun", "fg": 1798, "rotates": false, "multitile": false }, + { "id": "rifle_22", "fg": 509, "rotates": false, "multitile": false }, + { "id": "rifle_308", "fg": 509, "rotates": false, "multitile": false }, + { "id": "rifle_9mm", "fg": 515, "rotates": false, "multitile": false }, + { "id": "rifle_flintlock", "fg": 509, "rotates": false, "multitile": false }, + { "id": "rifle_scope", "fg": 918, "rotates": false, "multitile": false }, + { "id": "rm103a_pistol", "fg": 518, "rotates": false, "multitile": false }, + { "id": "rm11b_sniper_rifle", "fg": 515, "rotates": false, "multitile": false }, + { "id": "rm120c", "fg": 528, "rotates": false, "multitile": false }, + { "id": "rm121aux", "fg": 918, "rotates": false, "multitile": false }, + { "id": "rm2000_smg", "fg": 516, "rotates": false, "multitile": false }, + { "id": "rm20", "fg": 554, "rotates": false, "multitile": false }, + { "id": "rm228", "fg": 560, "rotates": false, "multitile": false }, + { "id": "rm298", "fg": 554, "rotates": false, "multitile": false }, + { "id": "rm451_flamethrower", "fg": 558, "rotates": false, "multitile": false }, + { "id": "rm51_assault_rifle", "fg": 550, "rotates": false, "multitile": false }, + { "id": "rm614_lmg", "fg": 554, "rotates": false, "multitile": false }, + { "id": "rm802", "fg": 536, "rotates": false, "multitile": false }, + { "id": "rm88_battle_rifle", "fg": 515, "rotates": false, "multitile": false }, + { "id": "rm99_pistol", "fg": 518, "rotates": false, "multitile": false }, + { "id": "roadmap", "fg": 593, "rotates": false, "multitile": false }, + { "id": "robot_controls", "fg": 1445, "rotates": false, "multitile": false }, + { "id": "rock", "fg": 457, "rotates": false }, + { "id": "rock_pot", "fg": 420, "rotates": false, "multitile": false }, + { "id": "rock_quern", "fg": 566, "rotates": false, "multitile": false }, + { "id": "rock_sock", "fg": 484, "rotates": false, "multitile": false }, + { "id": "rolling_paper", "fg": 488, "rotates": false, "multitile": false }, + { "id": "rollmat", "fg": 668, "rotates": false, "multitile": false }, + { "id": "rootbeer", "fg": 932, "rotates": false, "multitile": false }, + { "id": "rope_30", "fg": 523, "rotates": false }, + { "id": "rope_6", "fg": 523, "rotates": true }, + { "id": "RPG-7_ammo", "fg": 960, "rotates": false, "multitile": false }, + { "id": "RPG", "fg": 562, "rotates": false, "multitile": false }, + { "id": "rubber_slug", "fg": 616, "rotates": false, "multitile": false }, + { "id": "ruger_1022", "fg": 509, "rotates": false, "multitile": false }, + { "id": "ruger_mini", "fg": 509, "rotates": false, "multitile": false }, + { "id": "ruger_redhawk", "fg": 518, "rotates": false, "multitile": false }, + { "id": "rum", "fg": 932, "rotates": false, "multitile": false }, + { "id": "rx12_injector", "fg": 520, "rotates": false, "multitile": false }, + { "id": "r_carpet", "fg": 760, "rotates": false }, + { "id": "r_paint", "fg": 1396, "rotates": false, "multitile": false }, + { "id": "saddle", "fg": 1482, "bg": 1, "rotates": false, "multitile": false }, + { "id": "safe_box", "fg": 1565, "rotates": false, "multitile": false }, + { "id": "saiga_12", "fg": 529, "rotates": false, "multitile": false }, + { "id": "saiga_sawn", "fg": 525, "rotates": false, "multitile": false }, + { "id": "saline", "fg": 931, "rotates": false, "multitile": false }, + { "id": "salt_water", "fg": 931, "rotates": false, "multitile": false }, + { "id": "sarcophagus_access_code", "fg": 899, "rotates": false, "multitile": false }, + { "id": "savage_111f", "fg": 509, "rotates": false, "multitile": false }, + { "id": "saw", "fg": 693, "rotates": false, "multitile": false }, + { "id": "scalpel", "fg": 671, "rotates": false, "multitile": false }, + { "id": "scar_h", "fg": 550, "rotates": false, "multitile": false }, + { "id": "scar_l", "fg": 550, "rotates": false, "multitile": false }, + { "id": "scissors", "fg": 568, "rotates": false, "multitile": false }, + { "id": "scrambler", "fg": 627, "rotates": false, "multitile": false }, + { "id": "scrambler_act", "fg": 628, "rotates": false, "multitile": false }, + { "id": "scrap", "fg": 904, "rotates": false, "multitile": false }, + { "id": "screwdriver", "fg": 705, "rotates": false, "multitile": false }, + { "id": "scythe", "fg": 492, "rotates": false, "multitile": false }, + { "id": "scythe_war", "fg": 493, "rotates": false, "multitile": false }, + { + "id": "seatbelt", + "fg": 883, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 882 } ] + }, + { "id": "seat", "fg": 1482, "bg": 1, "rotates": false, "multitile": false }, + { "id": "seed_garlic", "fg": 857, "rotates": false }, + { "id": "selfbow", "fg": 894, "rotates": false, "multitile": false }, + { "id": "sewage", "fg": 932, "rotates": false, "multitile": false }, + { "id": "sewing_kit", "fg": 567, "rotates": false, "multitile": false }, + { "id": "shaft_metal", "fg": 903, "rotates": false, "multitile": false }, + { "id": "shaft_plastic", "fg": 903, "rotates": false, "multitile": false }, + { "id": "shaft_wood", "fg": 903, "rotates": false, "multitile": false }, + { "id": "shaft_wood_heavy", "fg": 903, "rotates": false, "multitile": false }, + { "id": "sharp_rock", "fg": 793, "rotates": false, "multitile": false }, + { "id": "sharp_toothbrush", "fg": 485, "rotates": false, "multitile": false }, + { "id": "sheet", "fg": 991, "rotates": false }, + { "id": "sheet_metal", "fg": 459, "rotates": false, "multitile": false }, + { "id": "sheet_metal_lit", "fg": 844, "rotates": false, "multitile": false }, + { "id": "shelter_kit", "fg": 246, "rotates": false, "multitile": false }, + { "id": "shishkebab_off", "fg": 673, "rotates": false, "multitile": false }, + { "id": "shishkebab_on", "fg": 674, "rotates": false, "multitile": false }, + { "id": "shocktonfa_off", "fg": 435, "rotates": false, "multitile": false }, + { "id": "shocktonfa_on", "fg": 447, "rotates": false, "multitile": false }, + { "id": "shock_staff", "fg": 495, "rotates": false, "multitile": false }, + { "id": "shortbow", "fg": 894, "rotates": false, "multitile": false }, + { "id": "shotgun_d", "fg": 526, "rotates": false, "multitile": false }, + { "id": "shotgun_primer", "fg": 909, "rotates": false, "multitile": false }, + { "id": "shotgun_sawn", "fg": 524, "rotates": false, "multitile": false }, + { "id": "shotgun_s", "fg": 526, "rotates": false, "multitile": false }, + { "id": "shotgun_trap", "fg": 608, "rotates": false, "multitile": false }, + { "id": "shot_00", "fg": 953, "rotates": false, "multitile": false }, + { "id": "shot_beanbag", "fg": 953, "rotates": false, "multitile": false }, + { "id": "shot_bird", "fg": 953, "rotates": false, "multitile": false }, + { "id": "shot_flechette", "fg": 953, "rotates": false, "multitile": false }, + { "id": "shot_he", "fg": 953, "rotates": false, "multitile": false }, + { "id": "shot_hull", "fg": 941 }, + { "id": "shot_scrapbag", "fg": 953, "rotates": false, "multitile": false }, + { "id": "shot_scrapslug", "fg": 953, "rotates": false, "multitile": false }, + { "id": "shot_scrap", "fg": 953, "rotates": false, "multitile": false }, + { "id": "shot_slug", "fg": 953, "rotates": false, "multitile": false }, + { "id": "shot_suppressor", "fg": 918, "rotates": false, "multitile": false }, + { "id": "shoulder_strap", "fg": 918, "rotates": false, "multitile": false }, + { "id": "shovel", "fg": 596, "rotates": false, "multitile": false }, + { "id": "sickle", "fg": 494, "rotates": false, "multitile": false }, + { "id": "sig_40", "fg": 518, "rotates": false, "multitile": false }, + { "id": "sig_mosquito", "fg": 518, "rotates": false, "multitile": false }, + { "id": "sig_p230", "fg": 518, "rotates": false, "multitile": false }, + { "id": "silver", "fg": 944, "rotates": false, "multitile": false }, + { "id": "silver_small", "fg": 904, "rotates": false, "multitile": false }, + { "id": "sinew", "fg": 884, "rotates": false, "multitile": false }, + { "id": "single_malt_whiskey", "fg": 932, "rotates": false, "multitile": false }, + { "id": "skewer", "fg": 424, "rotates": false, "multitile": false }, + { "id": "sks", "fg": 509, "rotates": false, "multitile": false }, + { "id": "slingshot", "fg": 512, "rotates": false, "multitile": false }, + { "id": "sling", "fg": 510, "rotates": false, "multitile": false }, + { "id": "small_lcd_screen", "fg": 369, "rotates": false, "multitile": false }, + { "id": "small_repairkit", "fg": 939, "rotates": false, "multitile": false }, + { "id": "small_storage_battery", "fg": 874, "rotates": false }, + { "id": "smart_lamp", "fg": 927, "rotates": false, "multitile": false }, + { "id": "smart_lamp_on", "fg": 928, "rotates": false, "multitile": false }, + { "id": "smokebomb", "fg": 631, "rotates": false, "multitile": false }, + { "id": "smokebomb_act", "fg": 632, "rotates": false, "multitile": false }, + { "id": "smpistol_primer", "fg": 909, "rotates": false, "multitile": false }, + { "id": "smrifle_primer", "fg": 909, "rotates": false, "multitile": false }, + { "id": "sm_extinguisher", "fg": 570, "rotates": false, "multitile": false }, + { "id": "snare_trigger", "fg": 707, "rotates": false, "multitile": false }, + { "id": "soap", "fg": 911, "rotates": false, "multitile": false }, + { "id": "solar_cell", "fg": 458, "rotates": false, "multitile": false }, + { "id": "solar_panel", "fg": 876, "rotates": false, "multitile": false }, + { "id": "solar_panel_v2", "fg": 876, "rotates": false }, + { "id": "solar_panel_v3", "fg": 876, "rotates": false }, + { "id": "soldering_iron", "fg": 583, "rotates": false, "multitile": false }, + { "id": "solder_wire", "fg": 885, "rotates": false, "multitile": false }, + { "id": "soup_human", "fg": 932, "rotates": false, "multitile": false }, + { "id": "soup_meat", "fg": 932, "rotates": false, "multitile": false }, + { "id": "soup_veggy", "fg": 1410, "rotates": false, "multitile": false }, + { "id": "soup_woods", "fg": 932, "rotates": false, "multitile": false }, + { "id": "spare_mag", "fg": 918, "rotates": false, "multitile": false }, + { "id": "speargun", "fg": 509, "rotates": false, "multitile": false }, + { "id": "spear_knife", "fg": 680, "rotates": false, "multitile": false }, + { "id": "spear_rebar", "fg": 466, "rotates": false, "multitile": false }, + { "id": "spear_steel", "fg": 466, "rotates": false, "multitile": false }, + { "id": "spear_survivor", "fg": 845, "rotates": false, "multitile": false }, + { "id": "spear_wood", "fg": 440, "rotates": false, "multitile": false }, + { "id": "spezi", "fg": 932, "rotates": false, "multitile": false }, + { "id": "spiked_plate", "fg": 463, "rotates": false, "multitile": false }, + { "id": "spiked_rocket", "fg": 823, "rotates": false, "multitile": false }, + { "id": "spike", "fg": 448, "rotates": false, "multitile": false }, + { "id": "spiral_stone", "fg": 384, "rotates": false, "multitile": false }, + { "id": "splinter", "fg": 660, "rotates": false, "multitile": false }, + { "id": "spoon", "fg": 415, "rotates": false, "multitile": false }, + { "id": "spork", "fg": 414, "rotates": false, "multitile": false }, + { "id": "sports_drink", "fg": 1395, "rotates": false }, + { "id": "spray_can", "fg": 713, "rotates": false, "multitile": false }, + { "id": "spring", "fg": 553, "rotates": false }, + { "id": "stabilizer", "fg": 918, "rotates": false, "multitile": false }, + { "id": "steel_chunk", "fg": 692, "rotates": false }, + { "id": "steel_lump", "fg": 681, "rotates": false }, + { "id": "steel_plate", "fg": 460, "rotates": false, "multitile": false }, + { "id": "steel_rail", "fg": 906, "rotates": false, "multitile": false }, + { "id": "stereo", "fg": 733, "rotates": false, "multitile": false }, + { "id": "stethoscope", "fg": 597, "rotates": false, "multitile": false }, + { "id": "steyr_aug", "fg": 552, "rotates": false, "multitile": false }, + { "id": "stick", "fg": 538, "rotates": false }, + { "id": "still", "fg": 742, "rotates": false, "multitile": false }, + { "id": "storage_battery", "fg": 874, "rotates": false, "multitile": false }, + { "id": "stout", "fg": 932, "rotates": false, "multitile": false }, + { "id": "straw_doll", "fg": 827, "rotates": false, "multitile": false }, + { "id": "straw_pile", "fg": 846, "rotates": false, "multitile": false }, + { "id": "string_36", "fg": 523, "rotates": false }, + { "id": "string_6", "fg": 523, "rotates": false }, + { "id": "subsuit_xl", "fg": 994, "rotates": false, "multitile": false }, + { "id": "superglue", "fg": 364, "rotates": false, "multitile": false }, + { "id": "suppressor", "fg": 918, "rotates": false, "multitile": false }, + { "id": "survival_marker", "fg": 448, "rotates": false, "multitile": false }, + { "id": "survivormap", "fg": 593, "rotates": false, "multitile": false }, + { "id": "survivor_machete", "fg": 672, "rotates": false, "multitile": false }, + { "id": "survivor_mess_kit", "fg": 834, "rotates": false, "multitile": false }, + { "id": "survivor_special_700", "fg": 509, "rotates": false, "multitile": false }, + { "id": "surv_carbine_223", "fg": 509, "rotates": false, "multitile": false }, + { "id": "surv_hand_cannon", "fg": 518, "rotates": false, "multitile": false }, + { "id": "surv_rocket_launcher", "fg": 836, "rotates": false, "multitile": false }, + { "id": "surv_six_shooter", "fg": 518, "rotates": false, "multitile": false }, + { "id": "sw629", "fg": 518, "rotates": false, "multitile": false }, + { "id": "swage", "fg": 754, "rotates": false, "multitile": false }, + { "id": "sweet_water", "fg": 931, "rotates": false, "multitile": false }, + { "id": "switchblade", "fg": 690, "rotates": false, "multitile": false }, + { "id": "sword_bayonet", "fg": 918, "rotates": false, "multitile": false }, + { "id": "sword_crude", "fg": 427, "rotates": false, "multitile": false }, + { "id": "sword_forged", "fg": 428, "rotates": false, "multitile": false }, + { + "id": [ + "sword_forged", + "longsword", + "longsword_fake", + "longsword_inferior", + "arming_sword", + "arming_sword_fake", + "arming_sword_inferior" + ], + "fg": 859, + "rotates": false + }, + { "id": "sword_nail", "fg": 426, "rotates": false, "multitile": false }, + { "id": "sword_wood", "fg": 425, "rotates": false, "multitile": false }, + { "id": "sw_22", "fg": 518, "rotates": false, "multitile": false }, + { "id": "sw_500", "fg": 518, "rotates": false, "multitile": false }, + { "id": "sw_610", "fg": 518, "rotates": false, "multitile": false }, + { "id": "sw_619", "fg": 518, "rotates": false, "multitile": false }, + { "id": "syringe", "fg": 423, "rotates": false, "multitile": false }, + { "id": "syrup", "fg": 932, "rotates": false, "multitile": false }, + { "id": "talking_doll", "fg": 738, "rotates": false, "multitile": false }, + { "id": "tanbark", "fg": 814, "rotates": false, "multitile": false }, + { "id": "tanned_hide", "fg": 363, "rotates": false, "multitile": false }, + { "id": "tanned_pelt", "fg": 362, "rotates": false, "multitile": false }, + { "id": "tanning_hide", "fg": 817, "rotates": false, "multitile": false }, + { "id": "tanning_pelt", "fg": 816, "rotates": false, "multitile": false }, + { "id": "tanto", "fg": 675, "rotates": false, "multitile": false }, + { "id": "taurus_38", "fg": 518, "rotates": false, "multitile": false }, + { "id": "tazer", "fg": 654, "rotates": false, "multitile": false }, + { "id": "TDI", "fg": 535, "rotates": false, "multitile": false }, + { "id": "teapot", "fg": 945, "rotates": false, "multitile": false }, + { "id": "tea", "fg": 932, "rotates": false, "multitile": false }, + { "id": "tec9", "fg": 516, "rotates": false, "multitile": false }, + { "id": "teddy", "fg": 828, "rotates": false, "multitile": false }, + { "id": "telepad", "fg": 940, "rotates": false, "multitile": false }, + { "id": "teleporter", "fg": 615, "rotates": false, "multitile": false }, + { "id": "teleumbrella", "fg": 474, "rotates": false, "multitile": false }, + { "id": "television", "fg": 401, "rotates": false, "multitile": false }, + { "id": "tent_kit", "fg": 245, "rotates": false, "multitile": false }, + { "id": "tequila", "fg": 932, "rotates": false, "multitile": false }, + { "id": "thermometer", "fg": 852, "rotates": false, "multitile": false }, + { "id": "thread", "fg": 885, "rotates": false, "multitile": false }, + { "id": "throw_extinguisher", "fg": 572, "rotates": false, "multitile": false }, + { "id": "tihar", "fg": 536, "rotates": false, "multitile": false }, + { "id": "tin", "fg": 904, "rotates": false, "multitile": false }, + { "id": "tin_plate", "fg": 413, "rotates": false, "multitile": false }, + { "id": "toaster", "fg": 403, "rotates": false, "multitile": false }, + { "id": "tokarev", "fg": 518, "rotates": false, "multitile": false }, + { "id": "tonfa", "fg": 435, "rotates": false, "multitile": false }, + { "id": "tonfa_wood", "fg": 437, "rotates": false, "multitile": false }, + { "id": "tongs", "fg": 752, "rotates": false, "multitile": false }, + { "id": "toolbox", "fg": 758, "rotates": false, "multitile": false }, + { "id": "tool_anfo_charge", "fg": 853, "rotates": false, "multitile": false }, + { "id": "tool_anfo_charge_act", "fg": 854, "rotates": false, "multitile": false }, + { "id": "tool_black_powder_charge", "fg": 805, "rotates": false, "multitile": false }, + { "id": "tool_black_powder_charge_act", "fg": 806, "rotates": false, "multitile": false }, + { "id": "tool_rdx_charge", "fg": 853, "rotates": false, "multitile": false }, + { "id": "tool_rdx_charge_act", "fg": 854, "rotates": false, "multitile": false }, + { "id": "tool_rdx_sand_bomb", "fg": 617, "rotates": false, "multitile": false }, + { "id": "tool_rdx_sand_bomb_act", "fg": 618, "rotates": false, "multitile": false }, + { "id": "torch", "fg": 696, "rotates": false, "multitile": false }, + { "id": "torch_done", "fg": 395, "rotates": false, "multitile": false }, + { "id": "torch_lit", "fg": 697, "rotates": false, "multitile": false }, + { "id": "touristmap", "fg": 593, "rotates": false, "multitile": false }, + { "id": "towel", "fg": 1006, "rotates": true }, + { "id": "transponder", "fg": 950, "rotates": false, "multitile": false }, + { "id": "trex_gun", "fg": 527, "rotates": false, "multitile": false }, + { "id": "trimmer_off", "fg": 542, "rotates": false, "multitile": false }, + { "id": "trimmer_on", "fg": 542, "rotates": false, "multitile": false }, + { "id": "triple_sec", "fg": 933, "rotates": false, "multitile": false }, + { "id": "tripwire", "fg": 606, "rotates": false, "multitile": false }, + { "id": "tuned_mechanism", "fg": 918, "rotates": false, "multitile": false }, + { "id": "two_way_radio", "fg": 585, "rotates": false, "multitile": false }, + { "id": "ugl_buttstock", "fg": 918, "rotates": false, "multitile": false }, + { "id": "umbrella", "fg": 474, "rotates": false, "multitile": false }, + { "id": "unbio_blaster_gun", "fg": 557, "rotates": false, "multitile": false }, + { "id": "UPS_off", "fg": 650, "rotates": false, "multitile": false }, + { "id": "UPS_on", "fg": 651, "rotates": false, "multitile": false }, + { "id": "usb_drive", "fg": 386, "rotates": false, "multitile": false }, + { "id": "usp_45", "fg": 518, "rotates": false, "multitile": false }, + { "id": "usp_9mm", "fg": 518, "rotates": false, "multitile": false }, + { "id": "uzi", "fg": 516, "rotates": false, "multitile": false }, + { "id": "u_shotgun", "fg": 918, "rotates": false, "multitile": false }, + { "id": "v12_combustion", "fg": 873, "rotates": false, "multitile": false }, + { "id": "v29", "fg": 555, "rotates": false, "multitile": false }, + { "id": "v29_cheap", "fg": 555, "rotates": false, "multitile": false }, + { "id": "v2_combustion", "fg": 873, "rotates": false, "multitile": false }, + { "id": "v6_combustion", "fg": 873, "rotates": false, "multitile": false }, + { "id": "v6_diesel", "fg": 873, "rotates": false, "multitile": false }, + { "id": "V8", "fg": 1409, "rotates": false, "multitile": false }, + { "id": "v8_combustion", "fg": 873, "rotates": false, "multitile": false }, + { "id": "v8_diesel", "fg": 873, "rotates": false, "multitile": false }, + { "id": "vacutainer", "fg": 665, "rotates": false, "multitile": false }, + { "id": "vac_sealer", "fg": 733, "rotates": false, "multitile": false }, + { "id": "veggy_pickled", "fg": 1286, "rotates": false, "multitile": false }, + { "id": "vehicle_controls", "fg": 881, "rotates": false, "multitile": false }, + { "id": "veh_tracker", "fg": 926, "rotates": false }, + { "id": "vinegar", "fg": 934, "rotates": false, "multitile": false }, + { "id": "vine_30", "fg": 598, "rotates": false, "multitile": false }, + { "id": "vodka", "fg": 931, "rotates": false, "multitile": false }, + { "id": "vortex_stone", "fg": 658, "rotates": false, "multitile": false }, + { "id": "v_table", "fg": 914, "rotates": false }, + { "id": "waffleiron", "fg": 378, "rotates": false, "multitile": false }, + { "id": "wakizashi", "fg": 675, "rotates": false, "multitile": false }, + { "id": "wakizashi_fake", "fg": 675, "rotates": false, "multitile": false }, + { "id": "walther_ppk", "fg": 518, "rotates": false, "multitile": false }, + { "id": "warhammer", "fg": 471, "rotates": false, "multitile": false }, + { "id": "wasp_sting", "fg": 443, "rotates": false, "multitile": false }, + { "id": "watercannon", "fg": 536, "rotates": false, "multitile": false }, + { "id": "waterproof_gunmod", "fg": 918, "rotates": false, "multitile": false }, + { "id": "waterskin2", "fg": 353, "rotates": false, "multitile": false }, + { "id": "waterskin3", "fg": 353, "rotates": false, "multitile": false }, + { "id": "waterskin", "fg": 353, "rotates": false, "multitile": false }, + { "id": "water", "fg": 931, "rotates": false, "multitile": false }, + { "id": "water_acid", "fg": 931, "rotates": false, "multitile": false }, + { "id": "water_acid_weak", "fg": 931, "rotates": false, "multitile": false }, + { "id": "water_clean", "fg": 931, "rotates": false, "multitile": false }, + { "id": "water_faucet", "fg": 784, "rotates": false }, + { "id": "water_mineral", "fg": 931, "rotates": false, "multitile": false }, + { "id": "water_purifier", "fg": 584, "rotates": false, "multitile": false }, + { "id": "wax", "fg": 1336, "rotates": false, "multitile": false }, + { "id": "wearable_light", "fg": 574, "rotates": false, "multitile": false }, + { "id": "wearable_light_on", "fg": 575, "rotates": false, "multitile": false }, + { "id": "wearable_rx12", "fg": 520, "rotates": false, "multitile": false }, + { "id": "weeks_old_newspaper", "fg": 899, "rotates": false, "multitile": false }, + { "id": "welder", "fg": 666, "rotates": false, "multitile": false }, + { "id": "welder_crude", "fg": 741, "rotates": false, "multitile": false }, + { "id": "weldrig", "fg": 878, "rotates": false, "multitile": false }, + { "id": "well_pump", "fg": 781, "rotates": false, "multitile": false }, + { "id": "wheel", "fg": 1465, "rotates": false, "multitile": false }, + { "id": "wheel_armor", "fg": 1514, "rotates": false, "multitile": false }, + { "id": "wheel_bicycle", "fg": 1467, "rotates": false, "multitile": false }, + { "id": "wheel_caster", "fg": 1467, "rotates": false, "multitile": false }, + { "id": "wheel_metal", "fg": 1465, "rotates": false, "multitile": false }, + { "id": "wheel_motorbike", "fg": 1464, "rotates": false, "multitile": false }, + { "id": "wheel_small", "fg": 1467, "rotates": false, "multitile": false }, + { "id": "wheel_wheelchair", "fg": 783, "rotates": false, "multitile": false }, + { "id": "wheel_wide", "fg": 1466, "rotates": false, "multitile": false }, + { "id": "wheel_wood", "fg": 1430, "rotates": false, "multitile": false }, + { "id": "wheel_wood_b", "fg": 1431, "rotates": false, "multitile": false }, + { "id": "whiskey", "fg": 932, "rotates": false, "multitile": false }, + { "id": "win70", "fg": 509, "rotates": false, "multitile": false }, + { "id": "wine_cabernet", "fg": 1409, "rotates": false, "multitile": false }, + { "id": "wine_chardonnay", "fg": 934, "rotates": false, "multitile": false }, + { "id": "wine_noir", "fg": 1409, "rotates": false, "multitile": false }, + { "id": "wine_riesling", "fg": 934, "rotates": false, "multitile": false }, + { "id": "wire", "fg": 430, "rotates": false, "multitile": false }, + { "id": "wire_barbed", "fg": 430, "rotates": false, "multitile": false }, + { "id": "withered", "fg": 361, "rotates": false, "multitile": false }, + { "id": "wooden_barrel", "fg": 949, "rotates": false }, + { "id": "wood_plate", "fg": 465, "rotates": false, "multitile": false }, + { "id": "wood_smoother", "fg": 437, "rotates": false, "multitile": false }, + { "id": "wrapper", "fg": 488, "rotates": true }, + { "id": "wrench", "fg": 706, "rotates": false, "multitile": false }, + { "id": "wristrocket", "fg": 597, "rotates": false, "multitile": false }, + { "id": "w_paint", "fg": 391, "rotates": false, "multitile": false }, + { "id": "xacto", "fg": 669, "rotates": false, "multitile": false }, + { "id": "xlframe", "fg": 923, "rotates": false }, + { "id": "yarn", "fg": 885, "rotates": false, "multitile": false }, + { "id": "y_carpet", "fg": 762, "rotates": false }, + { "id": "y_paint", "fg": 416, "rotates": false, "multitile": false }, + { "id": "zweifire_off", "fg": 684, "rotates": false, "multitile": false }, + { "id": "zweifire_on", "fg": 685, "rotates": false, "multitile": false }, + { "id": "zweihander", "fg": 682, "rotates": false, "multitile": false }, + { "id": "zweihander_fake", "fg": 682, "rotates": false, "multitile": false }, + { "id": "20x66_beanbag", "fg": 956, "rotates": false, "multitile": false }, + { "id": "20x66_bootleg_flechette", "fg": 956, "rotates": false, "multitile": false }, + { "id": "20x66_bootleg_shot", "fg": 956, "rotates": false, "multitile": false }, + { "id": "20x66_bootleg_slug", "fg": 956, "rotates": false, "multitile": false }, + { "id": "20x66_exp", "fg": 956, "rotates": false, "multitile": false }, + { "id": "20x66_flare", "fg": 956, "rotates": false, "multitile": false }, + { "id": "20x66_flechette", "fg": 956, "rotates": false, "multitile": false }, + { "id": "20x66_frag", "fg": 956, "rotates": false, "multitile": false }, + { "id": "20x66_inc", "fg": 956, "rotates": false, "multitile": false }, + { "id": "20x66_shot", "fg": 956, "rotates": false, "multitile": false }, + { "id": "20x66_slug", "fg": 956, "rotates": false, "multitile": false }, + { "id": "36navy", "fg": 521, "rotates": false, "multitile": false }, + { "id": "44army", "fg": 521, "rotates": false, "multitile": false }, + { "id": "50bmg", "fg": 954, "rotates": false, "multitile": false }, + { "id": "50ss", "fg": 954, "rotates": false, "multitile": false }, + { "id": "50_casing", "fg": 958, "rotates": false, "multitile": false }, + { "id": "50_incendiary", "fg": 954, "rotates": false, "multitile": false }, + { "id": "arrowhead", "fg": 957, "rotates": false, "multitile": false }, + { "id": "arrowhead_plastic", "fg": 957, "rotates": false, "multitile": false }, + { "id": "arrow_cf", "fg": 903, "rotates": false, "multitile": false }, + { "id": "arrow_exploding", "fg": 903, "rotates": false, "multitile": false }, + { "id": "arrow_field_point", "fg": 903, "rotates": false, "multitile": false }, + { "id": "arrow_field_point_fletched", "fg": 903, "rotates": false, "multitile": false }, + { "id": "arrow_fire_hardened", "fg": 903, "rotates": false, "multitile": false }, + { "id": "arrow_fire_hardened_fletched", "fg": 903, "rotates": false, "multitile": false }, + { "id": "arrow_flamming", "fg": 903, "rotates": false, "multitile": false }, + { "id": "arrow_heavy_field_point", "fg": 903, "rotates": false, "multitile": false }, + { "id": "arrow_heavy_field_point_fletched", "fg": 903, "rotates": false, "multitile": false }, + { "id": "arrow_heavy_fire_hardened", "fg": 903, "rotates": false, "multitile": false }, + { "id": "arrow_heavy_fire_hardened_fletched", "fg": 903, "rotates": false, "multitile": false }, + { "id": "arrow_metal", "fg": 903, "rotates": false, "multitile": false }, + { "id": "arrow_metal_sharpened", "fg": 903, "rotates": false, "multitile": false }, + { "id": "arrow_metal_sharpened_fletched", "fg": 903, "rotates": false, "multitile": false }, + { "id": "arrow_plastic", "fg": 903, "rotates": false, "multitile": false }, + { "id": "arrow_small_game", "fg": 903, "rotates": false, "multitile": false }, + { "id": "arrow_small_game_fletched", "fg": 903, "rotates": false, "multitile": false }, + { "id": "arrow_wood", "fg": 903, "rotates": false, "multitile": false }, + { "id": "arrow_wood_heavy", "fg": 903, "rotates": false, "multitile": false }, + { "id": "bolt_explosive", "fg": 903, "rotates": false, "multitile": false }, + { "id": "bolt_metal", "fg": 903, "rotates": false, "multitile": false }, + { "id": "bolt_steel", "fg": 903, "rotates": false, "multitile": false }, + { "id": "bolt_wood", "fg": 903, "rotates": false, "multitile": false }, + { "id": "signal_flare", "fg": 953, "rotates": false, "multitile": false }, + { "id": "101_carpentry", "fg": 964, "rotates": false, "multitile": false }, + { "id": "advanced_electronics", "fg": 962, "rotates": false, "multitile": false }, + { "id": "advanced_electrronics", "fg": 968, "rotates": false, "multitile": false }, + { "id": "adv_chemistry", "fg": 964, "rotates": false, "multitile": false }, + { "id": "atomic_survival", "fg": 961, "rotates": false, "multitile": false }, + { "id": "book_archery", "fg": 963, "rotates": false, "multitile": false }, + { "id": "book_icef", "fg": 968, "rotates": false, "multitile": false }, + { "id": "brewing_cookbook", "fg": 967, "rotates": false, "multitile": false }, + { "id": "carpentry_book", "fg": 964, "rotates": false, "multitile": false }, + { "id": "child_book", "fg": 1213, "rotates": false, "multitile": false }, + { "id": "computer_science", "fg": 968, "rotates": false, "multitile": false }, + { "id": "cookbook", "fg": 963, "rotates": false, "multitile": false }, + { "id": "cookbook_human", "fg": 963, "rotates": false, "multitile": false }, + { "id": "cookbook_italian", "fg": 963, "rotates": false, "multitile": false }, + { "id": "cookbook_sushi", "fg": 971, "rotates": false }, + { "id": "decoy_anarch", "fg": 966, "rotates": false }, + { "id": "decoy_elfa", "fg": 966, "rotates": false }, + { "id": "emergency_book", "fg": 962, "rotates": false, "multitile": false }, + { "id": "essay_book", "fg": 964, "rotates": false, "multitile": false }, + { "id": "fairy_tales", "fg": 969, "rotates": false, "multitile": false }, + { "id": "family_cookbook", "fg": 961, "rotates": false, "multitile": false }, + { "id": "fun_survival", "fg": 963, "rotates": false, "multitile": false }, + { "id": "fun_traps", "fg": 963, "rotates": false, "multitile": false }, + { "id": "glassblowing_book", "fg": 970, "rotates": false, "multitile": false }, + { "id": "guidebook", "fg": 966, "rotates": false, "multitile": false }, + { "id": "holybook_bible1", "fg": 971, "rotates": false }, + { "id": "holybook_bible2", "fg": 966, "rotates": false }, + { "id": "holybook_bible3", "fg": 966, "rotates": false }, + { "id": "holybook_granth", "fg": 971, "rotates": false }, + { "id": "holybook_hadith", "fg": 966, "rotates": false }, + { "id": "holybook_kallisti", "fg": 969, "rotates": false }, + { "id": "holybook_kojiki", "fg": 966, "rotates": false }, + { "id": "holybook_mormon", "fg": 968, "rotates": false }, + { "id": "holybook_pastafarian", "fg": 969, "rotates": false }, + { "id": "holybook_quran", "fg": 966, "rotates": false }, + { "id": "holybook_scientology", "fg": 971, "rotates": false }, + { "id": "holybook_slack", "fg": 969, "rotates": false }, + { "id": "holybook_sutras", "fg": 964, "rotates": false }, + { "id": "holybook_talmud", "fg": 969, "rotates": false }, + { "id": "holybook_tanakh", "fg": 966, "rotates": false }, + { "id": "holybook_tripitaka", "fg": 969, "rotates": false }, + { "id": "holybook_upanishads", "fg": 962, "rotates": false }, + { "id": "holybook_vedas", "fg": 964, "rotates": false }, + { "id": "howto_computers", "fg": 963, "rotates": false, "multitile": false }, + { "id": "howto_computer", "fg": 961, "rotates": false, "multitile": false }, + { "id": "howto_traps", "fg": 963, "rotates": false, "multitile": false }, + { "id": "mag_archery", "fg": 1213, "rotates": false, "multitile": false }, + { "id": "mag_barter", "fg": 962, "rotates": false, "multitile": false }, + { "id": "mag_bashing", "fg": 1213, "rotates": false, "multitile": false }, + { "id": "mag_beauty", "fg": 1213, "rotates": false, "multitile": false }, + { "id": "mag_carpentry", "fg": 1213, "rotates": false, "multitile": false }, + { "id": "mag_cars", "fg": 1213, "rotates": false, "multitile": false }, + { "id": "mag_comic", "fg": 1213, "rotates": false, "multitile": false }, + { "id": "mag_computer", "fg": 963, "rotates": false, "multitile": false }, + { "id": "mag_cooking", "fg": 1213, "rotates": false, "multitile": false }, + { "id": "mag_cutting", "fg": 965, "rotates": false, "multitile": false }, + { "id": "mag_dodge", "fg": 1213, "rotates": false, "multitile": false }, + { "id": "mag_dude", "fg": 968, "rotates": false, "multitile": false }, + { "id": "mag_electronics", "fg": 1213, "rotates": false, "multitile": false }, + { "id": "mag_fabrication", "fg": 1213, "rotates": false, "multitile": false }, + { "id": "mag_fieldrepair", "fg": 961, "rotates": false, "multitile": false }, + { "id": "mag_firstaid", "fg": 1213, "rotates": false, "multitile": false }, + { "id": "mag_gaming", "fg": 1213, "rotates": false, "multitile": false }, + { "id": "mag_glam", "fg": 1213, "rotates": false, "multitile": false }, + { "id": "mag_guns", "fg": 1213, "rotates": false, "multitile": false }, + { "id": "mag_launcher", "fg": 964, "rotates": false, "multitile": false }, + { "id": "mag_mechanics", "fg": 964, "rotates": false, "multitile": false }, + { "id": "mag_melee", "fg": 965, "rotates": false, "multitile": false }, + { "id": "mag_news", "fg": 1213, "rotates": false, "multitile": false }, + { "id": "mag_pistol", "fg": 966, "rotates": false, "multitile": false }, + { "id": "mag_porn", "fg": 1213, "rotates": false, "multitile": false }, + { "id": "mag_rifle", "fg": 963, "rotates": false, "multitile": false }, + { "id": "mag_shotgun", "fg": 963, "rotates": false, "multitile": false }, + { "id": "mag_smg", "fg": 966, "rotates": false, "multitile": false }, + { "id": "mag_stabbing", "fg": 965, "rotates": false, "multitile": false }, + { "id": "mag_survival", "fg": 963, "rotates": false, "multitile": false }, + { "id": "mag_swimming", "fg": 1213, "rotates": false, "multitile": false }, + { "id": "mag_tailor", "fg": 1213, "rotates": false, "multitile": false }, + { "id": "mag_throwing", "fg": 1213, "rotates": false, "multitile": false }, + { "id": "mag_traps", "fg": 1213, "rotates": false, "multitile": false }, + { "id": "mag_tv", "fg": 1213, "rotates": false, "multitile": false }, + { "id": "mag_unarmed", "fg": 964, "rotates": false, "multitile": false }, + { "id": "manual_aikido", "fg": 969, "rotates": false }, + { "id": "manual_archery", "fg": 961, "rotates": false, "multitile": false }, + { "id": "manual_bashing", "fg": 963, "rotates": false, "multitile": false }, + { "id": "manual_boxing", "fg": 963, "rotates": false, "multitile": false }, + { "id": "manual_brawl", "fg": 963, "rotates": false, "multitile": false }, + { "id": "manual_business", "fg": 963, "rotates": false, "multitile": false }, + { "id": "manual_capoeira", "fg": 969, "rotates": false }, + { "id": "manual_carpentry", "fg": 963, "rotates": false, "multitile": false }, + { "id": "manual_centipede", "fg": 969, "rotates": false }, + { "id": "manual_computers", "fg": 963, "rotates": false, "multitile": false }, + { "id": "manual_crane", "fg": 969, "rotates": false }, + { "id": "manual_cutting", "fg": 963, "rotates": false, "multitile": false }, + { "id": "manual_dodge", "fg": 962, "rotates": false, "multitile": false }, + { "id": "manual_dragon", "fg": 969, "rotates": false }, + { "id": "manual_driving", "fg": 963, "rotates": false, "multitile": false }, + { "id": "manual_electronics", "fg": 963, "rotates": false, "multitile": false }, + { "id": "manual_eskrima", "fg": 963, "rotates": false, "multitile": false }, + { "id": "manual_fabrication", "fg": 964, "rotates": false, "multitile": false }, + { "id": "manual_fencing", "fg": 963, "rotates": false, "multitile": false }, + { "id": "manual_first_aid", "fg": 963, "rotates": false, "multitile": false }, + { "id": "manual_guns", "fg": 963, "rotates": false, "multitile": false }, + { "id": "manual_gun", "fg": 963, "rotates": false, "multitile": false }, + { "id": "manual_judo", "fg": 969, "rotates": false }, + { "id": "manual_karate", "fg": 969, "rotates": false }, + { "id": "manual_knives", "fg": 963, "rotates": false, "multitile": false }, + { "id": "manual_krav_maga", "fg": 969, "rotates": false }, + { "id": "manual_launcher", "fg": 961, "rotates": false, "multitile": false }, + { "id": "manual_leopard", "fg": 969, "rotates": false }, + { "id": "manual_lizard", "fg": 969, "rotates": false }, + { "id": "manual_mechanics", "fg": 963, "rotates": false, "multitile": false }, + { "id": "manual_melee", "fg": 965, "rotates": false, "multitile": false }, + { "id": "manual_muay_thai", "fg": 969, "rotates": false }, + { "id": "manual_ninjutsu", "fg": 969, "rotates": false }, + { "id": "manual_niten", "fg": 963, "rotates": false, "multitile": false }, + { "id": "manual_pistol", "fg": 962, "rotates": false, "multitile": false }, + { "id": "manual_rifle", "fg": 963, "rotates": false, "multitile": false }, + { "id": "manual_scorpion", "fg": 969, "rotates": false }, + { "id": "manual_shotgun", "fg": 963, "rotates": false, "multitile": false }, + { "id": "manual_silat", "fg": 963, "rotates": false, "multitile": false }, + { "id": "manual_smg", "fg": 967, "rotates": false, "multitile": false }, + { "id": "manual_snake", "fg": 969, "rotates": false }, + { "id": "manual_speech", "fg": 963, "rotates": false, "multitile": false }, + { "id": "manual_stabbing", "fg": 963, "rotates": false, "multitile": false }, + { "id": "manual_survival", "fg": 963, "rotates": false, "multitile": false }, + { "id": "manual_swimming", "fg": 963, "rotates": false, "multitile": false }, + { "id": "manual_taekwondo", "fg": 969, "rotates": false }, + { "id": "manual_tailor", "fg": 963, "rotates": false, "multitile": false }, + { "id": "manual_tai_chi", "fg": 969, "rotates": false }, + { "id": "manual_throw", "fg": 963, "rotates": false, "multitile": false }, + { "id": "manual_tiger", "fg": 969, "rotates": false }, + { "id": "manual_toad", "fg": 969, "rotates": false }, + { "id": "manual_traps", "fg": 963, "rotates": false, "multitile": false }, + { "id": "manual_venom_snake", "fg": 969, "rotates": false }, + { "id": "manual_zui_quan", "fg": 969, "rotates": false }, + { "id": "many_years_old_newspaper", "fg": 899, "rotates": false, "multitile": false }, + { "id": "modern_tanner", "fg": 961, "rotates": false, "multitile": false }, + { "id": "months_old_newspaper", "fg": 899, "rotates": false, "multitile": false }, + { "id": "newest_newspaper", "fg": 899, "rotates": false, "multitile": false }, + { "id": "news_regional", "fg": 965, "rotates": false, "multitile": false }, + { "id": "note", "fg": 899, "rotates": false, "multitile": false }, + { "id": "novel_adventure", "fg": 961, "rotates": false, "multitile": false }, + { "id": "novel_buddy", "fg": 964, "rotates": false, "multitile": false }, + { "id": "novel_coa", "fg": 963, "rotates": false, "multitile": false }, + { "id": "novel_crime", "fg": 962, "rotates": false, "multitile": false }, + { "id": "novel_drama", "fg": 967, "rotates": false, "multitile": false }, + { "id": "novel_erotic", "fg": 1213, "rotates": false, "multitile": false }, + { "id": "novel_experimental", "fg": 962, "rotates": false, "multitile": false }, + { "id": "novel_fantasy", "fg": 967, "rotates": false, "multitile": false }, + { "id": "novel_horror", "fg": 967, "rotates": false, "multitile": false }, + { "id": "novel_mystery", "fg": 967, "rotates": false, "multitile": false }, + { "id": "novel_pulp", "fg": 966, "rotates": false, "multitile": false }, + { "id": "novel_road", "fg": 1213, "rotates": false, "multitile": false }, + { "id": "novel_romance", "fg": 967, "rotates": false, "multitile": false }, + { "id": "novel_samurai", "fg": 963, "rotates": false, "multitile": false }, + { "id": "novel_satire", "fg": 966, "rotates": false, "multitile": false }, + { "id": "novel_scifi", "fg": 967, "rotates": false, "multitile": false }, + { "id": "novel_sports", "fg": 969, "rotates": false, "multitile": false }, + { "id": "novel_spy", "fg": 967, "rotates": false, "multitile": false }, + { "id": "novel_swash", "fg": 967, "rotates": false, "multitile": false }, + { "id": "novel_thriller", "fg": 969, "rotates": false, "multitile": false }, + { "id": "novel_tragedy", "fg": 967, "rotates": false, "multitile": false }, + { "id": "novel_war", "fg": 961, "rotates": false, "multitile": false }, + { "id": "novel_western", "fg": 961, "rotates": false, "multitile": false }, + { "id": "one_year_old_newspaper", "fg": 899, "rotates": false, "multitile": false }, + { "id": "philosophy_book", "fg": 962, "rotates": false, "multitile": false }, + { "id": "phonebook", "fg": 964, "rotates": false }, + { "id": "photo_album", "fg": 961, "rotates": false, "multitile": false }, + { "id": "plays_book", "fg": 1213, "rotates": false, "multitile": false }, + { "id": "pocket_firearms", "fg": 961, "rotates": false, "multitile": false }, + { "id": "pocket_firstaid", "fg": 961, "rotates": false, "multitile": false }, + { "id": "pocket_survival", "fg": 963, "rotates": false, "multitile": false }, + { "id": "poetry_book", "fg": 1213, "rotates": false, "multitile": false }, + { "id": "priest_diary", "fg": 968, "rotates": false, "multitile": false }, + { "id": "radio_book", "fg": 964, "rotates": false, "multitile": false }, + { "id": "recipe_alpha", "fg": 971, "rotates": false, "multitile": false }, + { "id": "recipe_animal", "fg": 971, "rotates": false }, + { "id": "recipe_arrows", "fg": 961, "rotates": false, "multitile": false }, + { "id": "recipe_atomic_battery", "fg": 899, "rotates": false, "multitile": false }, + { "id": "recipe_augs", "fg": 966, "rotates": false }, + { "id": "recipe_bows", "fg": 961, "rotates": false, "multitile": false }, + { "id": "recipe_bullets", "fg": 961, "rotates": false, "multitile": false }, + { "id": "recipe_caseless", "fg": 966, "rotates": false, "multitile": false }, + { "id": "recipe_chimera", "fg": 971, "rotates": false, "multitile": false }, + { "id": "recipe_creepy", "fg": 971, "rotates": false }, + { "id": "recipe_elfa", "fg": 966, "rotates": false }, + { "id": "recipe_labchem", "fg": 971, "rotates": false }, + { "id": "recipe_lab_cvd", "fg": 970, "rotates": false, "multitile": false }, + { "id": "recipe_lab_elec", "fg": 964, "rotates": false }, + { "id": "recipe_maiar", "fg": 971, "rotates": false }, + { "id": "recipe_medicalmut", "fg": 962, "rotates": false, "multitile": false }, + { "id": "recipe_melee", "fg": 970, "rotates": false, "multitile": false }, + { "id": "recipe_mil_augs", "fg": 966, "rotates": false }, + { "id": "recipe_mininuke_launch", "fg": 964, "rotates": false, "multitile": false }, + { "id": "recipe_raptor", "fg": 971, "rotates": false }, + { "id": "recipe_serum", "fg": 971, "rotates": false }, + { "id": "record_accounting", "fg": 968, "rotates": false, "multitile": false }, + { "id": "record_patient", "fg": 968, "rotates": false, "multitile": false }, + { "id": "SICP", "fg": 968, "rotates": false, "multitile": false }, + { "id": "story_book", "fg": 962, "rotates": false, "multitile": false }, + { "id": "survival_book", "fg": 963, "rotates": false, "multitile": false }, + { "id": "survnote", "fg": 899, "rotates": false, "multitile": false }, + { "id": "tailor_portfolio", "fg": 961, "rotates": false, "multitile": false }, + { "id": "tall_tales", "fg": 963, "rotates": false, "multitile": false }, + { "id": "textbook_anarch", "fg": 966, "rotates": false }, + { "id": "textbook_armeast", "fg": 967, "rotates": false, "multitile": false }, + { "id": "textbook_armwest", "fg": 968, "rotates": false, "multitile": false }, + { "id": "textbook_business", "fg": 968, "rotates": false, "multitile": false }, + { "id": "textbook_carpentry", "fg": 968, "rotates": false, "multitile": false }, + { "id": "textbook_chemistry", "fg": 968, "rotates": false, "multitile": false }, + { "id": "textbook_computers", "fg": 968, "rotates": false, "multitile": false }, + { "id": "textbook_computer", "fg": 962, "rotates": false, "multitile": false }, + { "id": "textbook_electronics", "fg": 962, "rotates": false, "multitile": false }, + { "id": "textbook_fabrication", "fg": 963, "rotates": false, "multitile": false }, + { "id": "textbook_fireman", "fg": 964, "rotates": false, "multitile": false }, + { "id": "textbook_firstaid", "fg": 962, "rotates": false, "multitile": false }, + { "id": "textbook_gaswarfare", "fg": 964, "rotates": false, "multitile": false }, + { "id": "textbook_mechanics", "fg": 968, "rotates": false, "multitile": false }, + { "id": "textbook_robots", "fg": 968, "rotates": false, "multitile": false }, + { "id": "textbook_speech", "fg": 964, "rotates": false, "multitile": false }, + { "id": "textbook_survival", "fg": 963, "rotates": false, "multitile": false }, + { "id": "textbook_tailor", "fg": 963, "rotates": false, "multitile": false }, + { "id": "textbook_traps", "fg": 963, "rotates": false, "multitile": false }, + { "id": "textbook_weapeast", "fg": 970, "rotates": false, "multitile": false }, + { "id": "textbook_weapwest", "fg": 964, "rotates": false, "multitile": false }, + { "id": "trappers_companion", "fg": 961, "rotates": false, "multitile": false }, + { "id": "visions_solitude", "fg": 968, "rotates": false, "multitile": false }, + { "id": "welding_book", "fg": 962, "rotates": false, "multitile": false }, + { "id": "years_old_newspaper", "fg": 899, "rotates": false, "multitile": false }, + { "id": "ZSG", "fg": 967, "rotates": false, "multitile": false }, + { "id": "10gal_hat", "fg": 1229, "rotates": false, "multitile": false }, + { "id": "2byarm_guard", "fg": 1186, "rotates": false, "multitile": false }, + { "id": "2byshin_guard", "fg": 1186, "rotates": false, "multitile": false }, + { "id": "aep_suit", "fg": 1218, "rotates": false, "multitile": false }, + { "id": "american_flag", "fg": 1167, "rotates": false, "multitile": false }, + { "id": "anbc_suit", "fg": 1218, "rotates": false, "multitile": false }, + { "id": "apron_leather", "fg": 1208, "rotates": false, "multitile": false }, + { "id": "armguard_chitin", "fg": 1097, "rotates": false, "multitile": false }, + { "id": "armguard_hard", "fg": 1095, "rotates": false, "multitile": false }, + { "id": "armguard_metal", "fg": 1094, "rotates": false, "multitile": false }, + { "id": "armguard_paper", "fg": 1095, "rotates": false, "multitile": false }, + { "id": "armguard_soft", "fg": 1094, "rotates": false, "multitile": false }, + { "id": "armor_blarmor", "fg": 1217, "rotates": false, "multitile": false }, + { "id": "armor_bone", "fg": 1216, "rotates": false, "multitile": false }, + { "id": "armor_chitin", "fg": 1050, "rotates": false, "multitile": false }, + { "id": "armor_farmor", "fg": 1038, "rotates": false, "multitile": false }, + { "id": "armor_larmor", "fg": 1217, "rotates": false, "multitile": false }, + { "id": "armor_lightplate", "fg": 1204, "rotates": false, "multitile": false }, + { "id": "armor_nomad", "fg": 1084, "rotates": false, "multitile": false }, + { "id": "armor_plarmor", "fg": 1195, "rotates": false, "multitile": false }, + { "id": "armor_plate", "fg": 1054, "rotates": false, "multitile": false }, + { "id": "armor_samurai", "fg": 1206, "rotates": false, "multitile": false }, + { "id": "armor_scrapsuit", "fg": 1195, "rotates": false, "multitile": false }, + { "id": "army_top", "fg": 1060, "rotates": false, "multitile": false }, + { "id": "arm_splint", "fg": 1186, "rotates": false, "multitile": false }, + { "id": "arm_warmers", "fg": 1222, "rotates": false, "multitile": false }, + { "id": "backpack", "fg": 1149, "rotates": false, "multitile": false }, + { "id": "backpack_leather", "fg": 1150, "rotates": false, "multitile": false }, + { "id": "back_holster", "fg": 1156, "rotates": false, "multitile": false }, + { "id": "badge_cybercop", "fg": 1166, "rotates": false, "multitile": false }, + { "id": "badge_deputy", "fg": 1166, "rotates": false, "multitile": false }, + { "id": "badge_detective", "fg": 1166, "rotates": false, "multitile": false }, + { "id": "badge_marshal", "fg": 1166, "rotates": false, "multitile": false }, + { "id": "badge_swat", "fg": 1166, "rotates": false, "multitile": false }, + { "id": "balclava", "fg": 1134, "rotates": false, "multitile": false }, + { "id": "bandana", "fg": 1144, "rotates": false, "multitile": false }, + { "id": "barrette", "fg": 979, "rotates": false, "multitile": false }, + { "id": "bastsandals", "fg": 1018, "rotates": false, "multitile": false }, + { "id": "beekeeping_gloves", "fg": 1227, "rotates": false, "multitile": false }, + { "id": "beekeeping_hood", "fg": 1193, "rotates": false, "multitile": false }, + { "id": "beekeeping_suit", "fg": 1093, "rotates": false, "multitile": false }, + { "id": "beret", "fg": 1137, "rotates": false, "multitile": false }, + { "id": "beret_wool", "fg": 1137, "rotates": false, "multitile": false }, + { "id": "bikini_top", "fg": 1062, "rotates": false, "multitile": false }, + { "id": "bikini_top_fur", "fg": 1064, "rotates": false, "multitile": false }, + { "id": "bikini_top_leather", "fg": 1063, "rotates": false, "multitile": false }, + { "id": "bindle", "fg": 989, "rotates": false, "multitile": false }, + { "id": "blanket", "fg": 1168, "rotates": false, "multitile": false }, + { "id": "blazer", "fg": 1076, "rotates": false, "multitile": false }, + { "id": "bondage_mask", "fg": 1042, "rotates": false, "multitile": false }, + { "id": "bondage_suit", "fg": 1041, "rotates": false, "multitile": false }, + { "id": "bookplate", "fg": 1196, "rotates": false, "multitile": false }, + { "id": "boots", "fg": 1012, "rotates": false, "multitile": false }, + { "id": "boots_bone", "fg": 1215, "rotates": false, "multitile": false }, + { "id": "boots_bunker", "fg": 1214, "rotates": false, "multitile": false }, + { "id": "boots_chitin", "fg": 1022, "rotates": false, "multitile": false }, + { "id": "boots_combat", "fg": 1015, "rotates": false, "multitile": false }, + { "id": "boots_fsurvivor", "fg": 1199, "rotates": false, "multitile": false }, + { "id": "boots_fur", "fg": 1013, "rotates": false, "multitile": false }, + { "id": "boots_h20survivor", "fg": 1009, "rotates": false, "multitile": false }, + { "id": "boots_hiking", "fg": 1016, "rotates": false, "multitile": false }, + { "id": "boots_hsurvivor", "fg": 1199, "rotates": false, "multitile": false }, + { "id": "boots_larmor", "fg": 1012, "rotates": false, "multitile": false }, + { "id": "boots_lsurvivor", "fg": 1015, "rotates": false, "multitile": false }, + { "id": "boots_plate", "fg": 1199, "rotates": false, "multitile": false }, + { "id": "boots_rubber", "fg": 1214, "rotates": false, "multitile": false }, + { "id": "boots_steel", "fg": 1014, "rotates": false, "multitile": false }, + { "id": "boots_survivor", "fg": 1014, "rotates": false, "multitile": false }, + { "id": "boots_western", "fg": 1245, "rotates": false, "multitile": false }, + { "id": "boots_winter", "fg": 1017, "rotates": false, "multitile": false }, + { "id": "boots_wsurvivor", "fg": 1017, "rotates": false, "multitile": false }, + { "id": "boots_xlsurvivor", "fg": 1014, "rotates": false, "multitile": false }, + { "id": "bowhat", "fg": 1148, "rotates": false, "multitile": false }, + { "id": "boxer_shorts", "fg": 1023, "rotates": false, "multitile": false }, + { "id": "boxing_gloves", "fg": 1101, "rotates": false, "multitile": false }, + { "id": "boy_shorts", "fg": 1023, "rotates": false, "multitile": false }, + { "id": "bra", "fg": 1062, "rotates": false, "multitile": false }, + { "id": "briefcase", "fg": 939, "rotates": false, "multitile": false }, + { "id": "briefs", "fg": 1223, "rotates": false, "multitile": false }, + { "id": "brooch", "fg": 374, "rotates": false, "multitile": false }, + { "id": "bunker_coat", "fg": 1079, "rotates": false, "multitile": false }, + { "id": "bunker_pants", "fg": 1187, "rotates": false, "multitile": false }, + { "id": "b_shorts", "fg": 1243, "rotates": false, "multitile": false }, + { "id": "camera", "fg": 795, "rotates": false, "multitile": false }, + { "id": "camera_pro", "fg": 796, "rotates": false, "multitile": false }, + { "id": "camisole", "fg": 1061, "rotates": false, "multitile": false }, + { "id": "ceramic_shard", "fg": 793, "rotates": false, "multitile": false }, + { "id": "chainmail_arms", "fg": 1094, "rotates": false, "multitile": false }, + { "id": "chainmail_hood", "fg": 1144, "rotates": false, "multitile": false }, + { "id": "chainmail_legs", "fg": 1094, "rotates": false, "multitile": false }, + { "id": "chainmail_suit", "fg": 1054, "rotates": false, "multitile": false }, + { "id": "chainmail_vest", "fg": 1089, "rotates": false, "multitile": false }, + { "id": "chaps_leather", "fg": 1029, "rotates": false, "multitile": false }, + { "id": "chestrig", "fg": 1092, "rotates": false, "multitile": false }, + { "id": "cleansuit", "fg": 1053, "rotates": false, "multitile": false }, + { "id": "cleats", "fg": 1009, "rotates": false, "multitile": false }, + { "id": "cloak", "fg": 1175, "rotates": false, "multitile": false }, + { "id": "cloak_fur", "fg": 1176, "rotates": false, "multitile": false }, + { "id": "cloak_leather", "fg": 1177, "rotates": false, "multitile": false }, + { "id": "clogs", "fg": 1018, "rotates": false, "multitile": false }, + { "id": "clownshoes", "fg": 1040, "rotates": false, "multitile": false }, + { "id": "coat_fur", "fg": 1087, "rotates": false, "multitile": false }, + { "id": "coat_fur_sf", "fg": 1087, "rotates": false, "multitile": false }, + { "id": "coat_lab", "fg": 1093, "rotates": false, "multitile": false }, + { "id": "coat_rain", "fg": 1079, "rotates": false, "multitile": false }, + { "id": "coat_winter", "fg": 1086, "rotates": false, "multitile": false }, + { "id": "collarpin", "fg": 394, "rotates": false, "multitile": false }, + { "id": "copper_bracelet", "fg": 985, "rotates": false, "multitile": false }, + { "id": "copper_ear", "fg": 982, "rotates": false, "multitile": false }, + { "id": "corset", "fg": 1043, "rotates": false, "multitile": false }, + { "id": "cowboy_hat", "fg": 1228, "rotates": false, "multitile": false }, + { "id": "cowl_wool", "fg": 1144, "rotates": false, "multitile": false }, + { "id": "cured_hide", "fg": 813, "rotates": false, "multitile": false }, + { "id": "cured_pelt", "fg": 812, "rotates": false, "multitile": false }, + { "id": "dance_shoes", "fg": 1020, "rotates": false, "multitile": false }, + { "id": "depowered_armor", "fg": 1179, "rotates": false, "multitile": false }, + { "id": "depowered_helmet", "fg": 1180, "rotates": false, "multitile": false }, + { "id": "diamond_dental_grill", "fg": 396, "rotates": false, "multitile": false }, + { "id": "diamond_ring", "fg": 1161, "rotates": false, "multitile": false }, + { "id": "dinosuit", "fg": 1249, "rotates": false, "multitile": false }, + { "id": "dive_bag", "fg": 1155, "rotates": false, "multitile": false }, + { "id": "diving_watch", "fg": 1191, "rotates": false, "multitile": false }, + { "id": "down_blanket", "fg": 1168, "rotates": false, "multitile": false }, + { "id": "down_pillow", "fg": 792, "rotates": false, "multitile": false }, + { "id": "dragonskin", "fg": 1238, "rotates": false, "multitile": false }, + { "id": "dress", "fg": 1048, "rotates": false, "multitile": false }, + { "id": "dress_shirt", "fg": 1058, "rotates": false, "multitile": false }, + { "id": "dress_shoes", "fg": 1020, "rotates": false, "multitile": false }, + { "id": "dress_wedding", "fg": 1049, "rotates": false, "multitile": false }, + { "id": "duffelbag", "fg": 1152, "rotates": false, "multitile": false }, + { "id": "duster", "fg": 1082, "rotates": false, "multitile": false }, + { "id": "duster_fur", "fg": 1085, "rotates": false, "multitile": false }, + { "id": "duster_leather", "fg": 1084, "rotates": false, "multitile": false }, + { "id": "duster_survivor", "fg": 1084, "rotates": false, "multitile": false }, + { "id": "ear_plugs", "fg": 1239, "rotates": false, "multitile": false }, + { "id": "elbow_pads", "fg": 1096, "rotates": false, "multitile": false }, + { "id": "emer_blanket", "fg": 1170, "rotates": false, "multitile": false }, + { "id": "emer_blanket_on", "fg": 1170, "rotates": false, "multitile": false }, + { "id": "entry_suit", "fg": 1213, "rotates": false, "multitile": false }, + { "id": "exploding_arrow_warhead", "fg": 957, "rotates": false, "multitile": false }, + { "id": "e_handcuffs", "fg": 797, "rotates": false, "multitile": false }, + { "id": "fancy_sunglasses", "fg": 1212, "rotates": false, "multitile": false }, + { "id": "fanny", "fg": 1155, "rotates": false, "multitile": false }, + { "id": "fc_hairpin", "fg": 978, "rotates": false, "multitile": false }, + { "id": "fedora", "fg": 1228, "rotates": false, "multitile": false }, + { "id": "fencing_jacket", "fg": 1093, "rotates": false, "multitile": false }, + { "id": "fencing_mask", "fg": 1144, "rotates": false, "multitile": false }, + { "id": "fencing_pants", "fg": 988, "rotates": false, "multitile": false }, + { "id": "firehelmet", "fg": 1135, "rotates": false, "multitile": false }, + { "id": "fireman_belt", "fg": 1236, "rotates": false, "multitile": false }, + { "id": "fire_gauntlets", "fg": 1110, "rotates": false, "multitile": false }, + { "id": "fishing_waders", "fg": 1080, "rotates": false, "multitile": false }, + { "id": "flag_shirt", "fg": 1056, "rotates": false, "multitile": false }, + { "id": "flip_flops", "fg": 1019, "rotates": false, "multitile": false }, + { "id": "flotation_vest", "fg": 1083, "rotates": false, "multitile": false }, + { "id": "folding_poncho", "fg": 972, "rotates": false, "multitile": false }, + { "id": "folding_poncho_on", "fg": 1079, "rotates": false, "multitile": false }, + { "id": "football_armor", "fg": 1010, "rotates": false, "multitile": false }, + { "id": "footrags", "fg": 1019, "rotates": false, "multitile": false }, + { "id": "footrags_fur", "fg": 1018, "rotates": false, "multitile": false }, + { "id": "footrags_leather", "fg": 1018, "rotates": false, "multitile": false }, + { "id": "fsurvivor_suit", "fg": 1201, "rotates": false, "multitile": false }, + { "id": "fur", "fg": 814, "rotates": false, "multitile": false }, + { "id": "fur_blanket", "fg": 1169, "rotates": false, "multitile": false }, + { "id": "fur_cat_ears", "fg": 1064, "rotates": false, "multitile": false }, + { "id": "fur_collar", "fg": 1234, "rotates": false, "multitile": false }, + { "id": "fur_rollmat", "fg": 1172, "rotates": false, "multitile": false }, + { "id": "gauntlets_bone", "fg": 1227, "rotates": false, "multitile": false }, + { "id": "gauntlets_chitin", "fg": 1100, "rotates": false, "multitile": false }, + { "id": "gauntlets_larmor", "fg": 1105, "rotates": false, "multitile": false }, + { "id": "geta", "fg": 1008, "rotates": false, "multitile": false }, + { "id": "glasses_bal", "fg": 1125, "rotates": false, "multitile": false }, + { "id": "glasses_bifocal", "fg": 1119, "rotates": false, "multitile": false }, + { "id": "glasses_eye", "fg": 1117, "rotates": false, "multitile": false }, + { "id": "glasses_monocle", "fg": 1126, "rotates": false, "multitile": false }, + { "id": "glasses_reading", "fg": 1118, "rotates": false, "multitile": false }, + { "id": "glasses_safety", "fg": 1120, "rotates": false, "multitile": false }, + { "id": "gloves_bag", "fg": 1100, "rotates": false, "multitile": false }, + { "id": "gloves_fingerless", "fg": 1107, "rotates": false, "multitile": false }, + { "id": "gloves_fingerless_mod", "fg": 1107, "rotates": false, "multitile": false }, + { "id": "gloves_fsurvivor", "fg": 1046, "rotates": false, "multitile": false }, + { "id": "gloves_fur", "fg": 1102, "rotates": false, "multitile": false }, + { "id": "gloves_h20survivor", "fg": 1046, "rotates": false, "multitile": false }, + { "id": "gloves_hsurvivor", "fg": 1046, "rotates": false, "multitile": false }, + { "id": "gloves_leather", "fg": 1105, "rotates": false, "multitile": false }, + { "id": "gloves_light", "fg": 1100, "rotates": false, "multitile": false }, + { "id": "gloves_liner", "fg": 1099, "rotates": false, "multitile": false }, + { "id": "gloves_lsurvivor", "fg": 1098, "rotates": false, "multitile": false }, + { "id": "gloves_medical", "fg": 1109, "rotates": false, "multitile": false }, + { "id": "gloves_plate", "fg": 1046, "rotates": false, "multitile": false }, + { "id": "gloves_rubber", "fg": 1108, "rotates": false, "multitile": false }, + { "id": "gloves_survivor", "fg": 1110, "rotates": false, "multitile": false }, + { "id": "gloves_tactical", "fg": 1106, "rotates": false, "multitile": false }, + { "id": "gloves_winter", "fg": 1104, "rotates": false, "multitile": false }, + { "id": "gloves_wool", "fg": 1103, "rotates": false, "multitile": false }, + { "id": "gloves_wraps", "fg": 1099, "rotates": false, "multitile": false }, + { "id": "gloves_wraps_fur", "fg": 1107, "rotates": false, "multitile": false }, + { "id": "gloves_wraps_leather", "fg": 1107, "rotates": false, "multitile": false }, + { "id": "gloves_wsurvivor", "fg": 1104, "rotates": false, "multitile": false }, + { "id": "gloves_xlsurvivor", "fg": 1110, "rotates": false, "multitile": false }, + { "id": "glove_jackson", "fg": 787, "rotates": false, "multitile": false }, + { "id": "gobag", "fg": 1151, "rotates": false, "multitile": false }, + { "id": "goggles_ir", "fg": 1002, "rotates": false, "multitile": false }, + { "id": "goggles_ir_on", "fg": 1002, "rotates": false, "multitile": false }, + { "id": "goggles_nv", "fg": 1124, "rotates": false, "multitile": false }, + { "id": "goggles_nv_on", "fg": 1124, "rotates": false, "multitile": false }, + { "id": "goggles_ski", "fg": 1122, "rotates": false, "multitile": false }, + { "id": "goggles_swim", "fg": 1121, "rotates": false, "multitile": false }, + { "id": "goggles_welding", "fg": 1123, "rotates": false, "multitile": false }, + { "id": "gold_bracelet", "fg": 974, "rotates": false, "multitile": false }, + { "id": "gold_dental_grill", "fg": 396, "rotates": false, "multitile": false }, + { "id": "gold_ear", "fg": 980, "rotates": false, "multitile": false }, + { "id": "gold_watch", "fg": 986, "rotates": false, "multitile": false }, + { "id": "greatcoat", "fg": 1005, "rotates": false }, + { "id": "h20survivor_suit", "fg": 1201, "rotates": false, "multitile": false }, + { "id": "hairpin", "fg": 977, "rotates": false, "multitile": false }, + { "id": "hakama_gi", "fg": 1027, "rotates": false, "multitile": false }, + { "id": "halter_top", "fg": 1047, "rotates": false, "multitile": false }, + { "id": "hand_crossbow", "fg": 895, "rotates": false, "multitile": false }, + { "id": "hat_ball", "fg": 1128, "rotates": false, "multitile": false }, + { "id": "hat_boonie", "fg": 1129, "rotates": false, "multitile": false }, + { "id": "hat_chef", "fg": 1192, "rotates": false, "multitile": false }, + { "id": "hat_cotton", "fg": 1130, "rotates": false, "multitile": false }, + { "id": "hat_fur", "fg": 1133, "rotates": false, "multitile": false }, + { "id": "hat_hard", "fg": 1135, "rotates": false, "multitile": false }, + { "id": "hat_hunting", "fg": 1132, "rotates": false, "multitile": false }, + { "id": "hat_knit", "fg": 1131, "rotates": false, "multitile": false }, + { "id": "hat_newsboy", "fg": 1130, "rotates": false, "multitile": false }, + { "id": "hat_noise_cancelling", "fg": 1240, "rotates": false, "multitile": false }, + { "id": "hazmat_suit", "fg": 1053, "rotates": false, "multitile": false }, + { "id": "headgear", "fg": 1011, "rotates": false, "multitile": false }, + { "id": "heels", "fg": 1021, "rotates": false, "multitile": false }, + { "id": "helmet_army", "fg": 1141, "rotates": false, "multitile": false }, + { "id": "helmet_ball", "fg": 1140, "rotates": false, "multitile": false }, + { "id": "helmet_barbute", "fg": 1205, "rotates": false, "multitile": false }, + { "id": "helmet_bike", "fg": 1138, "rotates": false, "multitile": false }, + { "id": "helmet_bone", "fg": 1219, "rotates": false, "multitile": false }, + { "id": "helmet_football", "fg": 1011, "rotates": false, "multitile": false }, + { "id": "helmet_hsurvivor", "fg": 1203, "rotates": false, "multitile": false }, + { "id": "helmet_kabuto", "fg": 1207, "rotates": false, "multitile": false }, + { "id": "helmet_larmor", "fg": 1233, "rotates": false, "multitile": false }, + { "id": "helmet_survivor", "fg": 1232, "rotates": false, "multitile": false }, + { "id": "helmet_xlsurvivor", "fg": 1232, "rotates": false, "multitile": false }, + { "id": "hoodie", "fg": 1070, "rotates": false, "multitile": false }, + { "id": "hood_rain", "fg": 1226, "rotates": false, "multitile": false }, + { "id": "hood_wsurvivor", "fg": 987, "rotates": false, "multitile": false }, + { "id": "hot_pants", "fg": 1065, "rotates": false, "multitile": false }, + { "id": "hot_pants_fur", "fg": 1067, "rotates": false, "multitile": false }, + { "id": "hot_pants_leather", "fg": 1066, "rotates": false, "multitile": false }, + { "id": "jacket_army", "fg": 1032, "rotates": false, "multitile": false }, + { "id": "jacket_evac", "fg": 1074, "rotates": false, "multitile": false }, + { "id": "jacket_flannel", "fg": 1075, "rotates": false, "multitile": false }, + { "id": "jacket_jean", "fg": 1074, "rotates": false, "multitile": false }, + { "id": [ "jacket_leather", "jacket_windbreaker" ], "fg": 1077, "rotates": false, "multitile": false }, + { "id": "jacket_leather_red", "fg": 1086, "rotates": false, "multitile": false }, + { "id": "jacket_light", "fg": 1073, "rotates": false, "multitile": false }, + { "id": "jeans", "fg": 1026, "rotates": false, "multitile": false }, + { "id": "jeans_red", "fg": 1033, "rotates": false, "multitile": false }, + { "id": "jedi_cloak", "fg": 1178, "rotates": false, "multitile": false }, + { "id": "jersey", "fg": 1071, "rotates": false, "multitile": false }, + { "id": "judo_gi", "fg": 1039, "rotates": false, "multitile": false }, + { "id": "jumper_cable", "fg": 809, "rotates": false, "multitile": false }, + { "id": "jumper_cable_heavy", "fg": 809, "rotates": false, "multitile": false }, + { "id": "jumpsuit", "fg": 1037, "rotates": false, "multitile": false }, + { "id": "jumpsuit_xl", "fg": 1037, "rotates": false, "multitile": false }, + { "id": "karate_gi", "fg": 1039, "rotates": false, "multitile": false }, + { "id": "keffiyeh", "fg": 1111, "rotates": false, "multitile": false }, + { "id": "keikogi", "fg": 1093, "rotates": false, "multitile": false }, + { "id": "kevlar", "fg": 1078, "rotates": false, "multitile": false }, + { "id": "kilt", "fg": 1036, "rotates": false, "multitile": false }, + { "id": "knee_high_boots", "fg": 1245, "rotates": false, "multitile": false }, + { "id": "knee_pads", "fg": 1189, "rotates": false, "multitile": false }, + { "id": "knit_scarf", "fg": 1113, "rotates": false, "multitile": false }, + { "id": "knit_scarf_loose", "fg": 1113, "rotates": false, "multitile": false }, + { "id": "kufi", "fg": 1004, "rotates": false, "multitile": false }, + { "id": "leathersandals", "fg": 1018, "rotates": false, "multitile": false }, + { "id": "leather", "fg": 815, "rotates": false, "multitile": false }, + { "id": "leather_belt", "fg": 1236, "rotates": false, "multitile": false }, + { "id": "leather_cat_ears", "fg": 1063, "rotates": false, "multitile": false }, + { "id": "leather_collar", "fg": 1234, "rotates": false, "multitile": false }, + { "id": "leather_pouch", "fg": 1160, "rotates": false, "multitile": false }, + { "id": "leggings", "fg": 1244, "rotates": false, "multitile": false }, + { "id": "legguard_hard", "fg": 1095, "rotates": false, "multitile": false }, + { "id": "legguard_metal", "fg": 1094, "rotates": false, "multitile": false }, + { "id": "legguard_paper", "fg": 1095, "rotates": false, "multitile": false }, + { "id": "legrig", "fg": 1211, "rotates": false, "multitile": false }, + { "id": "leg_splint", "fg": 1186, "rotates": false, "multitile": false }, + { "id": "leg_warmers", "fg": 1222, "rotates": false, "multitile": false }, + { "id": "leg_warmers_xlf", "fg": 1222, "rotates": false, "multitile": false }, + { "id": "leg_warmers_xl", "fg": 1222, "rotates": false, "multitile": false }, + { "id": "linuxtshirt", "fg": 1164, "rotates": false, "multitile": false }, + { "id": "locket", "fg": 1162, "rotates": false, "multitile": false }, + { "id": "loincloth", "fg": 1223, "rotates": false, "multitile": false }, + { "id": "loincloth_fur", "fg": 1224, "rotates": false, "multitile": false }, + { "id": "loincloth_leather", "fg": 1225, "rotates": false, "multitile": false }, + { "id": "longshirt", "fg": 1059, "rotates": false, "multitile": false }, + { "id": "long_knit_scarf", "fg": 1113, "rotates": false, "multitile": false }, + { "id": "long_knit_scarf_loose", "fg": 1113, "rotates": false, "multitile": false }, + { "id": "long_patchwork_scarf", "fg": 1113, "rotates": false, "multitile": false }, + { "id": "long_patchwork_scarf_loose", "fg": 1113, "rotates": false, "multitile": false }, + { "id": "long_underpants", "fg": 1035, "rotates": false, "multitile": false }, + { "id": "long_undertop", "fg": 1220, "rotates": false, "multitile": false }, + { "id": "lowtops", "fg": 1019, "rotates": false, "multitile": false }, + { "id": "lsurvivor_suit", "fg": 1197, "rotates": false, "multitile": false }, + { "id": "maid_dress", "fg": 1248, "rotates": false, "multitile": false }, + { "id": "maid_hat", "fg": 1138, "rotates": false, "multitile": false }, + { "id": "makeshift_sling", "fg": 990, "rotates": false, "multitile": false }, + { "id": "mask_bal", "fg": 1209, "rotates": false, "multitile": false }, + { "id": "mask_bunker", "fg": 1116, "rotates": false, "multitile": false }, + { "id": "mask_bunker_on", "fg": 1116, "rotates": false, "multitile": false }, + { "id": "mask_dust", "fg": 1112, "rotates": false, "multitile": false }, + { "id": "mask_filter", "fg": 1115, "rotates": false, "multitile": false }, + { "id": "mask_fsurvivorxl", "fg": 1116, "rotates": false, "multitile": false }, + { "id": "mask_fsurvivor", "fg": 1116, "rotates": false, "multitile": false }, + { "id": "mask_gas", "fg": 1116, "rotates": false, "multitile": false }, + { "id": "mask_gas_xl", "fg": 1116, "rotates": false, "multitile": false }, + { "id": "mask_guy_fawkes", "fg": 1210, "rotates": false, "multitile": false }, + { "id": "mask_h20survivorxl", "fg": 1116, "rotates": false, "multitile": false }, + { "id": "mask_h20survivorxl_on", "fg": 1116, "rotates": false, "multitile": false }, + { "id": "mask_h20survivor", "fg": 1116, "rotates": false, "multitile": false }, + { "id": "mask_h20survivor_on", "fg": 1116, "rotates": false, "multitile": false }, + { "id": "mask_hockey", "fg": 1210, "rotates": false, "multitile": false }, + { "id": "mask_rioter", "fg": 1144, "rotates": false, "multitile": false }, + { "id": "mask_ski", "fg": 1134, "rotates": false, "multitile": false }, + { "id": "mask_ski_loose", "fg": 1134, "rotates": false, "multitile": false }, + { "id": "mask_survivorxl", "fg": 1116, "rotates": false, "multitile": false }, + { "id": "mask_survivor", "fg": 1116, "rotates": false, "multitile": false }, + { "id": "mask_wsurvivorxl", "fg": 1116, "rotates": false, "multitile": false }, + { "id": "mask_wsurvivor", "fg": 1116, "rotates": false, "multitile": false }, + { "id": "mbag", "fg": 1154, "rotates": false, "multitile": false }, + { "id": "miner_hat", "fg": 975, "rotates": false, "multitile": false }, + { "id": "miner_hat_on", "fg": 976, "rotates": false, "multitile": false }, + { "id": "mittens", "fg": 1101, "rotates": false, "multitile": false }, + { "id": "mocassins", "fg": 1018, "rotates": false, "multitile": false }, + { "id": "modularvestceramic", "fg": 1237, "rotates": false, "multitile": false }, + { "id": "modularvesthard", "fg": 1237, "rotates": false, "multitile": false }, + { "id": "modularvestkevlar", "fg": 1237, "rotates": false, "multitile": false }, + { "id": "modularveststeel", "fg": 1237, "rotates": false, "multitile": false }, + { "id": "modularvestsuper", "fg": 1237, "rotates": false, "multitile": false }, + { "id": "modularvest", "fg": 1237, "rotates": false, "multitile": false }, + { "id": "molle_pack", "fg": 1151, "rotates": false, "multitile": false }, + { "id": "motorbike_armor", "fg": 1213, "rotates": false, "multitile": false }, + { "id": "motorbike_boots", "fg": 1199, "rotates": false, "multitile": false }, + { "id": "motorbike_pants", "fg": 1027, "rotates": false, "multitile": false }, + { "id": "mouthpiece", "fg": 1246, "rotates": false, "multitile": false }, + { "id": "nanoskirt", "fg": 992, "rotates": false, "multitile": false }, + { "id": "necklace", "fg": 1162, "rotates": false, "multitile": false }, + { "id": "nomex_gloves", "fg": 1046, "rotates": false, "multitile": false }, + { "id": "nomex_hood", "fg": 1144, "rotates": false, "multitile": false }, + { "id": "nomex_socks", "fg": 1009, "rotates": false, "multitile": false }, + { "id": "nomex_suit", "fg": 1044, "rotates": false, "multitile": false }, + { "id": "obi_gi", "fg": 522, "rotates": false, "multitile": false }, + { "id": "optical_cloak", "fg": 1178, "rotates": false, "multitile": false }, + { "id": "pants", "fg": 1027, "rotates": false, "multitile": false }, + { "id": "pants_army", "fg": 1031, "rotates": false, "multitile": false }, + { "id": "pants_cargo", "fg": 1030, "rotates": false, "multitile": false }, + { "id": "pants_checkered", "fg": 1194, "rotates": false, "multitile": false }, + { "id": "pants_fur", "fg": 1034, "rotates": false, "multitile": false }, + { "id": "pants_leather", "fg": 1028, "rotates": false, "multitile": false }, + { "id": "pants_ski", "fg": 1033, "rotates": false, "multitile": false }, + { "id": "pants_survivor", "fg": 1030, "rotates": false, "multitile": false }, + { "id": "patchwork_scarf", "fg": 1113, "rotates": false, "multitile": false }, + { "id": "patchwork_scarf_loose", "fg": 1113, "rotates": false, "multitile": false }, + { "id": "peacoat", "fg": 1088, "rotates": false, "multitile": false }, + { "id": "plastic_shopping_bag", "fg": 786, "rotates": false, "multitile": false }, + { "id": "polo_shirt", "fg": 1057, "rotates": false, "multitile": false }, + { "id": "poncho", "fg": 1081, "rotates": false, "multitile": false }, + { "id": "postman_hat", "fg": 1131, "rotates": false, "multitile": false }, + { "id": "postman_shirt", "fg": 1241, "rotates": false, "multitile": false }, + { "id": "postman_shorts", "fg": 1242, "rotates": false, "multitile": false }, + { "id": "pot_helmet", "fg": 1139, "rotates": false, "multitile": false }, + { "id": "power_armor_basic", "fg": 1179, "rotates": false, "multitile": false }, + { "id": "power_armor_frame", "fg": 1185, "rotates": false, "multitile": false }, + { "id": "power_armor_heavy", "fg": 1183, "rotates": false, "multitile": false }, + { "id": "power_armor_helmet_basic", "fg": 1180, "rotates": false, "multitile": false }, + { "id": "power_armor_helmet_heavy", "fg": 1184, "rotates": false, "multitile": false }, + { "id": "power_armor_helmet_light", "fg": 1182, "rotates": false, "multitile": false }, + { "id": "power_armor_light", "fg": 1181, "rotates": false, "multitile": false }, + { "id": [ "purse", "slingpack" ], "fg": 1153, "rotates": false, "multitile": false }, + { "id": "quiver", "fg": 1157, "rotates": false, "multitile": false }, + { "id": "quiver_large", "fg": 1158, "rotates": false, "multitile": false }, + { "id": "rad_badge", "fg": 1165, "rotates": false, "multitile": false }, + { "id": "ring", "fg": 1161, "rotates": false, "multitile": false }, + { "id": "rm13_armor", "fg": 1204, "rotates": false, "multitile": false }, + { "id": "rm13_armor_on", "fg": 1204, "rotates": false, "multitile": false }, + { "id": "rollerskates", "fg": 1045, "rotates": false, "multitile": false }, + { "id": "roller_blades", "fg": 1045, "rotates": false, "multitile": false }, + { "id": "rucksack", "fg": 1151, "rotates": false, "multitile": false }, + { "id": "runner_bag", "fg": 1149, "rotates": false, "multitile": false }, + { "id": "scabbard", "fg": 1158, "rotates": false, "multitile": false }, + { "id": "scarf", "fg": 1113, "rotates": false, "multitile": false }, + { "id": "scarf_fur", "fg": 1114, "rotates": false, "multitile": false }, + { "id": "scarf_fur_long", "fg": 1114, "rotates": false, "multitile": false }, + { "id": "scarf_fur_long_loose", "fg": 1114, "rotates": false, "multitile": false }, + { "id": "scarf_fur_loose", "fg": 1114, "rotates": false, "multitile": false }, + { "id": "scarf_long", "fg": 1113, "rotates": false, "multitile": false }, + { "id": "scarf_long_loose", "fg": 1113, "rotates": false, "multitile": false }, + { "id": "scarf_loose", "fg": 1113, "rotates": false, "multitile": false }, + { "id": "sf_watch", "fg": 986, "rotates": false, "multitile": false }, + { "id": "shark_suit", "fg": 1213, "rotates": false, "multitile": false }, + { "id": "sheath", "fg": 1157, "rotates": false, "multitile": false }, + { "id": "sheriffshirt", "fg": 1059, "rotates": false, "multitile": false }, + { "id": "shoes_bowling", "fg": 729, "rotates": false, "multitile": false }, + { "id": "sholster", "fg": 919, "rotates": false, "multitile": false }, + { "id": "shorts", "fg": 1024, "rotates": false, "multitile": false }, + { "id": "shorts_cargo", "fg": 1025, "rotates": false, "multitile": false }, + { "id": "shorts_denim", "fg": 1243, "rotates": false, "multitile": false }, + { "id": "silver_bracelet", "fg": 984, "rotates": false, "multitile": false }, + { "id": "silver_ear", "fg": 981, "rotates": false, "multitile": false }, + { "id": "skinny_tie", "fg": 373, "rotates": false, "multitile": false }, + { "id": "skirt", "fg": 1036, "rotates": false, "multitile": false }, + { "id": "skirt_leather", "fg": 1247, "rotates": false, "multitile": false }, + { "id": "sleeping_bag", "fg": 1171, "rotates": false, "multitile": false }, + { "id": "sleeping_bag_fur", "fg": 1169, "rotates": false, "multitile": false }, + { "id": "sleeveless_duster", "fg": 1089, "rotates": false, "multitile": false }, + { "id": "sleeveless_duster_fur", "fg": 1090, "rotates": false, "multitile": false }, + { "id": "sleeveless_duster_leather", "fg": 1090, "rotates": false, "multitile": false }, + { "id": "sleeveless_duster_survivor", "fg": 1090, "rotates": false, "multitile": false }, + { "id": "sleeveless_trenchcoat", "fg": 1089, "rotates": false, "multitile": false }, + { "id": "sleeveless_trenchcoat_fur", "fg": 1090, "rotates": false, "multitile": false }, + { "id": "sleeveless_trenchcoat_leather", "fg": 1090, "rotates": false, "multitile": false }, + { "id": "sleeveless_trenchcoat_survivor", "fg": 1090, "rotates": false, "multitile": false }, + { "id": "sleeveless_tunic", "fg": 1048, "rotates": false, "multitile": false }, + { "id": "small_relic", "fg": 1163, "rotates": false, "multitile": false }, + { "id": "sneakers", "fg": 1020, "rotates": false, "multitile": false }, + { "id": "snuggie", "fg": 1174, "rotates": false, "multitile": false }, + { "id": "socks", "fg": 1007, "rotates": false, "multitile": false }, + { "id": "socks_bag", "fg": 1019, "rotates": false, "multitile": false }, + { "id": "socks_bowling", "fg": 1007, "rotates": false, "multitile": false }, + { "id": "socks_wool", "fg": 1008, "rotates": false, "multitile": false }, + { "id": "sports_bra", "fg": 1062, "rotates": false, "multitile": false }, + { "id": "stockings", "fg": 1244, "rotates": false, "multitile": false }, + { "id": "stockings_tent_arms", "fg": 1244, "rotates": false, "multitile": false }, + { "id": "stockings_tent_legs", "fg": 1244, "rotates": false, "multitile": false }, + { "id": "straw_basket", "fg": 829, "rotates": false, "multitile": false }, + { "id": "straw_fedora", "fg": 830, "rotates": false, "multitile": false }, + { "id": "straw_hat", "fg": 830, "rotates": false, "multitile": false }, + { "id": "straw_sandals", "fg": 1018, "rotates": false, "multitile": false }, + { "id": "striped_pants", "fg": 988, "rotates": false, "multitile": false }, + { "id": "striped_shirt", "fg": 1058, "rotates": false, "multitile": false }, + { "id": "suitcase_l", "fg": 573, "rotates": false, "multitile": false }, + { "id": "suitcase_m", "fg": 611, "rotates": false, "multitile": false }, + { "id": "suit", "fg": 1051, "rotates": false, "multitile": false }, + { "id": "sundress", "fg": 1048, "rotates": false, "multitile": false }, + { "id": "sunglasses", "fg": 1127, "rotates": false, "multitile": false }, + { "id": "survivor_belt", "fg": 1091, "rotates": false, "multitile": false }, + { "id": "survivor_belt_notools", "fg": 1091, "rotates": false, "multitile": false }, + { "id": "survivor_duffel_bag", "fg": 1154, "rotates": false, "multitile": false }, + { "id": "survivor_pack", "fg": 1150, "rotates": false, "multitile": false }, + { "id": "survivor_rucksack", "fg": 1154, "rotates": false, "multitile": false }, + { "id": "survivor_runner_pack", "fg": 1150, "rotates": false, "multitile": false }, + { "id": "survivor_suit", "fg": 1198, "rotates": false, "multitile": false }, + { "id": "survivor_vest", "fg": 1092, "rotates": false, "multitile": false }, + { "id": "swat_armor", "fg": 1202, "rotates": false, "multitile": false }, + { "id": "sweater", "fg": 1069, "rotates": false, "multitile": false }, + { "id": "sweatshirt", "fg": 1068, "rotates": false, "multitile": false }, + { "id": "swim_fins", "fg": 1200, "rotates": false, "multitile": false }, + { "id": "tabi_dress", "fg": 1009, "rotates": false, "multitile": false }, + { "id": "tabi_gi", "fg": 1007, "rotates": false, "multitile": false }, + { "id": "tac_fullhelmet", "fg": 1143, "rotates": false, "multitile": false }, + { "id": "tac_helmet", "fg": 1203, "rotates": false, "multitile": false }, + { "id": "tank_top", "fg": 1061, "rotates": false, "multitile": false }, + { "id": "technician_pants_blue", "fg": 789, "rotates": false, "multitile": false }, + { "id": "technician_pants_gray", "fg": 1027, "rotates": false, "multitile": false }, + { "id": "technician_pants_ltblue", "fg": 1026, "rotates": false, "multitile": false }, + { "id": "technician_shirt_blue", "fg": 788, "rotates": false, "multitile": false }, + { "id": "technician_shirt_gray", "fg": 1055, "rotates": false, "multitile": false }, + { "id": "technician_shirt_ltblue", "fg": 1057, "rotates": false, "multitile": false }, + { "id": "thermal_gloves", "fg": 1046, "rotates": false, "multitile": false }, + { "id": "thermal_gloves_on", "fg": 1046, "rotates": false, "multitile": false }, + { "id": "thermal_mask", "fg": 1134, "rotates": false, "multitile": false }, + { "id": "thermal_mask_on", "fg": 1134, "rotates": false, "multitile": false }, + { "id": "thermal_outfit", "fg": 1044, "rotates": false, "multitile": false }, + { "id": "thermal_outfit_on", "fg": 1044, "rotates": false, "multitile": false }, + { "id": "thermal_socks", "fg": 1009, "rotates": false, "multitile": false }, + { "id": "thermal_socks_on", "fg": 1009, "rotates": false, "multitile": false }, + { "id": "thermal_suit", "fg": 1044, "rotates": false, "multitile": false }, + { "id": "thermal_suit_on", "fg": 1044, "rotates": false, "multitile": false }, + { "id": "throwing_axe", "fg": 896, "rotates": false, "multitile": false }, + { "id": "throwing_knife", "fg": 448, "rotates": false, "multitile": false }, + { "id": "tieclip", "fg": 394, "rotates": false, "multitile": false }, + { "id": "tights", "fg": 1027, "rotates": false, "multitile": false }, + { "id": "tool_belt", "fg": 1091, "rotates": false, "multitile": false }, + { "id": "tophat", "fg": 1147, "rotates": false, "multitile": false }, + { "id": "touring_suit", "fg": 1217, "rotates": false, "multitile": false }, + { "id": "towel_wet", "fg": 1168, "rotates": false, "multitile": false }, + { "id": "trenchcoat", "fg": 1082, "rotates": false, "multitile": false }, + { "id": "trenchcoat_fur", "fg": 1085, "rotates": false, "multitile": false }, + { "id": "trenchcoat_leather", "fg": 1084, "rotates": false, "multitile": false }, + { "id": "trenchcoat_survivor", "fg": 1084, "rotates": false, "multitile": false }, + { "id": "tricorne", "fg": 1130, "rotates": false, "multitile": false }, + { "id": "trunks", "fg": 1023, "rotates": false, "multitile": false }, + { "id": "tshirt", "fg": 1055, "rotates": false, "multitile": false }, + { "id": "tshirt_text", "fg": 1055, "rotates": false, "multitile": false }, + { "id": "tunic_rag", "fg": 1047, "rotates": false, "multitile": false }, + { "id": "turban", "fg": 1144, "rotates": false, "multitile": false }, + { "id": "tux", "fg": 1052, "rotates": false, "multitile": false }, + { "id": "undershirt", "fg": 1055, "rotates": false, "multitile": false }, + { "id": "under_armor", "fg": 1072, "rotates": false, "multitile": false }, + { "id": "under_armor_shorts", "fg": 1024, "rotates": false, "multitile": false }, + { "id": "union_suit", "fg": 1221, "rotates": false, "multitile": false }, + { "id": "vest", "fg": 1089, "rotates": false, "multitile": false }, + { "id": "vest_leather", "fg": 1090, "rotates": false, "multitile": false }, + { "id": "waistcoat", "fg": 1089, "rotates": false, "multitile": false }, + { "id": "wetsuit", "fg": 1044, "rotates": false, "multitile": false }, + { "id": "wetsuit_booties", "fg": 1009, "rotates": false, "multitile": false }, + { "id": "wetsuit_gloves", "fg": 1046, "rotates": false, "multitile": false }, + { "id": "wetsuit_hood", "fg": 1144, "rotates": false, "multitile": false }, + { "id": "wetsuit_spring", "fg": 1047, "rotates": false, "multitile": false }, + { "id": "winter_gloves_army", "fg": 1099, "rotates": false, "multitile": false }, + { "id": "winter_jacket_army", "fg": 1093, "rotates": false, "multitile": false }, + { "id": "winter_pants_army", "fg": 988, "rotates": false, "multitile": false }, + { "id": "wolfsuit", "fg": 1038, "rotates": false, "multitile": false }, + { "id": "wool_hoodie", "fg": 1070, "rotates": false, "multitile": false }, + { "id": "wool_suit", "fg": 1221, "rotates": false, "multitile": false }, + { "id": "wrapped_rad_badge", "fg": 1165, "rotates": false, "multitile": false }, + { "id": "wristwatch", "fg": 1191, "rotates": false, "multitile": false }, + { "id": "wsurvivor_suit", "fg": 1231, "rotates": false, "multitile": false }, + { "id": "xlsurvivor_suit", "fg": 1198, "rotates": false, "multitile": false }, + { "id": "zubon_gi", "fg": 988, "rotates": false, "multitile": false }, + { "id": "1st_aid", "fg": 1274, "rotates": false }, + { "id": "adderall", "fg": 1260, "rotates": false, "multitile": false }, + { "id": "antibiotics", "fg": 1266, "rotates": false, "multitile": false }, + { "id": "antifungal", "fg": 1269, "rotates": false }, + { "id": "antiparasitic", "fg": 1269, "rotates": false }, + { "id": "aspirin", "fg": 1269, "rotates": false }, + { "id": "bandages", "fg": 1275, "rotates": false }, + { "id": "caffeine", "fg": 1270, "rotates": false }, + { "id": "cigar", "fg": 1265, "rotates": false, "multitile": false }, + { "id": "cigar_butt", "fg": 772, "rotates": false, "multitile": false }, + { "id": "cigar_lit", "fg": 771, "rotates": false, "multitile": false }, + { "id": "cig", "fg": 1263, "rotates": false, "multitile": false }, + { "id": "cig_butt", "fg": 767, "rotates": false, "multitile": false }, + { "id": "cig_lit", "fg": 766, "rotates": false, "multitile": false }, + { "id": "codeine", "fg": 1258, "rotates": false, "multitile": false }, + { "id": "coke", "fg": 348, "rotates": false, "multitile": false }, + { "id": "contacts", "fg": 942, "rotates": false }, + { "id": "crack", "fg": 1267, "rotates": false, "multitile": false }, + { "id": "dayquil", "fg": 1271, "rotates": false }, + { "id": "eyedrops", "fg": 1252, "rotates": false }, + { "id": "flu_shot", "fg": 1251, "rotates": false, "multitile": false }, + { "id": "handrolled_cig", "fg": 768, "rotates": false, "multitile": false }, + { "id": "heroin", "fg": 1375, "rotates": false, "multitile": false }, + { "id": "inhaler", "fg": 1257, "rotates": false, "multitile": false }, + { "id": "inhaler_sewergas", "fg": 1257, "rotates": false, "multitile": false }, + { "id": "inhaler_stimgas", "fg": 1257, "rotates": false, "multitile": false }, + { "id": "iodine", "fg": 1269, "rotates": false, "multitile": false }, + { "id": "joint", "fg": 768, "rotates": false, "multitile": false }, + { "id": "joint_lit", "fg": 769, "rotates": false, "multitile": false }, + { "id": "joint_roach", "fg": 770, "rotates": false, "multitile": false }, + { "id": "lsd", "fg": 1268, "rotates": false, "multitile": false }, + { "id": "meth", "fg": 348, "rotates": false, "multitile": false }, + { "id": "morphine", "fg": 348, "rotates": false, "multitile": false }, + { "id": "oxycodone", "fg": 1254, "rotates": false, "multitile": false }, + { "id": "oxygen", "fg": 1253, "rotates": false }, + { "id": "oxygen_tank", "fg": 1253, "rotates": false }, + { "id": "poppy_pain", "fg": 348, "rotates": false, "multitile": false }, + { "id": "poppy_sleep", "fg": 348, "rotates": false, "multitile": false }, + { "id": "pur_tablets", "fg": 1269, "rotates": false }, + { "id": "quikclot", "fg": 1267, "rotates": false, "multitile": false }, + { "id": "thorazine", "fg": 1261, "rotates": false, "multitile": false }, + { "id": "tobacco", "fg": 1375, "rotates": false, "multitile": false }, + { "id": "tramadol", "fg": 1269, "rotates": false, "multitile": false }, + { "id": "vaccine_shot", "fg": 1251, "rotates": false, "multitile": false }, + { "id": "vitamins", "fg": 1273, "rotates": false }, + { "id": "weed", "fg": 1264, "rotates": false, "multitile": false }, + { "id": "xanax", "fg": 1259, "rotates": false, "multitile": false }, + { "id": "acorns", "fg": 1285, "rotates": false, "multitile": false }, + { "id": "acorns", "fg": 1285, "rotates": false, "multitile": false }, + { "id": "acorns_cooked", "fg": 1375, "rotates": false, "multitile": false }, + { "id": "ant_egg", "fg": 1341, "rotates": false, "multitile": false }, + { "id": "apple", "fg": 1287, "rotates": false, "multitile": false }, + { "id": "apple_canned", "fg": 1297, "rotates": false, "multitile": false }, + { "id": "apple_vac", "fg": 1297, "rotates": false, "multitile": false }, + { "id": "apricot", "fg": 1389, "rotates": false, "multitile": false }, + { "id": "arm", "fg": 1339, "rotates": false, "multitile": false }, + { "id": "bacon", "fg": 1338, "rotates": false, "multitile": false }, + { "id": "banana", "fg": 1288, "rotates": false, "multitile": false }, + { "id": "barley", "fg": 1310, "rotates": false, "multitile": false }, + { "id": "basketball", "fg": 1378, "rotates": false, "multitile": false }, + { "id": "beansnrice", "fg": 348, "rotates": false, "multitile": false }, + { "id": "beans_cooked", "fg": 1311, "rotates": false, "multitile": false }, + { "id": "beet_syrup", "fg": 932, "rotates": false, "multitile": false }, + { "id": "bfipowder", "fg": 348, "rotates": false, "multitile": false }, + { "id": "biscuit", "fg": 1367, "rotates": false, "multitile": false }, + { "id": "blackberries", "fg": 1306, "rotates": false, "multitile": false }, + { "id": "blt", "fg": 1344, "rotates": false, "multitile": false }, + { "id": "blueberries", "fg": 1306, "rotates": false, "multitile": false }, + { "id": "blueberries_cooked", "fg": 1390, "rotates": false, "multitile": false }, + { "id": "bobburger", "fg": 1750, "rotates": false, "multitile": false }, + { "id": "boiled_egg", "fg": 1341, "rotates": false, "multitile": false }, + { "id": "bologna", "fg": 1329, "rotates": false, "multitile": false }, + { "id": "bone", "fg": 952, "rotates": false, "multitile": false }, + { "id": "bone_human", "fg": 952, "rotates": false, "multitile": false }, + { "id": "bone_tainted", "fg": 825, "rotates": false, "multitile": false }, + { "id": "brandy", "fg": 937, "rotates": false, "multitile": false }, + { "id": "bread", "fg": 1350, "rotates": false, "multitile": false }, + { "id": "brew_bum_wine", "fg": 1409, "rotates": false, "multitile": false }, + { "id": "brew_fruit_wine", "fg": 937, "rotates": false, "multitile": false }, + { "id": "brioche", "fg": 1350, "rotates": false, "multitile": false }, + { "id": "broccoli", "fg": 1313, "rotates": false, "multitile": false }, + { "id": "brownie_weed", "fg": 1355, "rotates": false, "multitile": false }, + { "id": "buckwheat", "fg": 1375, "rotates": false, "multitile": false }, + { "id": "buckwheat_cooked", "fg": 1375, "rotates": false, "multitile": false }, + { "id": "caff_gum", "fg": 1340, "rotates": false, "multitile": false }, + { "id": "cake2", "fg": 1355, "rotates": false, "multitile": false }, + { "id": "cake3", "fg": 1357, "rotates": false, "multitile": false }, + { "id": "candy2", "fg": 1302, "rotates": false, "multitile": false }, + { "id": "candy3", "fg": 1302, "rotates": false, "multitile": false }, + { "id": "candycigarette", "fg": 1391, "rotates": false, "multitile": false }, + { "id": "candy", "fg": 1302, "rotates": false, "multitile": false }, + { "id": "can_beans", "fg": 1375, "rotates": false, "multitile": false }, + { "id": "can_catfood", "fg": 1280, "rotates": false, "multitile": false }, + { "id": "can_cheese", "fg": 1374, "rotates": false, "multitile": false }, + { "id": "can_chicken", "fg": 1343, "rotates": false, "multitile": false }, + { "id": "can_chowder", "fg": 348, "rotates": false, "multitile": false }, + { "id": "can_clams", "fg": 348, "rotates": false, "multitile": false }, + { "id": "can_coconut", "fg": 1343, "rotates": false, "multitile": false }, + { "id": "can_corn", "fg": 1374, "rotates": false, "multitile": false }, + { "id": "can_herring", "fg": 908, "rotates": false, "multitile": false }, + { "id": "can_pineapple", "fg": 1374, "rotates": false, "multitile": false }, + { "id": "can_salmon", "fg": 1280, "rotates": false, "multitile": false }, + { "id": "can_sardine", "fg": 908, "rotates": false, "multitile": false }, + { "id": "can_spam", "fg": 1280, "rotates": false, "multitile": false }, + { "id": "can_tomato", "fg": 1296, "rotates": false, "multitile": false }, + { "id": "can_tuna", "fg": 1280, "rotates": false, "multitile": false }, + { "id": "carrot", "fg": 1316, "rotates": false, "multitile": false }, + { "id": "catfood", "fg": 1280, "rotates": false, "multitile": false }, + { "id": "celery", "fg": 749, "rotates": false, "multitile": false }, + { "id": "cereal2", "fg": 1292, "rotates": false, "multitile": false }, + { "id": "cereal3", "fg": 1292, "rotates": false, "multitile": false }, + { "id": "cereal", "fg": 1292, "rotates": false, "multitile": false }, + { "id": "chaw", "fg": 1284, "rotates": false, "multitile": false }, + { "id": "cheeseburgerhuman", "fg": 1750, "rotates": false, "multitile": false }, + { "id": "cheeseburger", "fg": 1750, "rotates": false, "multitile": false }, + { "id": "cheese", "fg": 1392, "rotates": false, "multitile": false }, + { "id": "cheese_fries", "fg": 1380, "rotates": false, "multitile": false }, + { "id": "chem_anfo", "fg": 1280, "rotates": false, "multitile": false }, + { "id": "chem_chromium_oxide", "fg": 1284, "rotates": false, "multitile": false }, + { "id": "chem_hexamine", "fg": 1334, "rotates": false, "multitile": false }, + { "id": "chem_sulphur", "fg": 1374, "rotates": false, "multitile": false }, + { "id": "cherries", "fg": 1373, "rotates": false, "multitile": false }, + { "id": "chilidogs", "fg": 1330, "rotates": false, "multitile": false }, + { "id": "chilidogs_human", "fg": 1330, "rotates": false, "multitile": false }, + { "id": "chili", "fg": 1365, "rotates": false, "multitile": false }, + { "id": "chili_human", "fg": 1365, "rotates": false, "multitile": false }, + { "id": "chilly-p", "fg": 1296, "rotates": false, "multitile": false }, + { "id": "chips2", "fg": 1291, "rotates": false, "multitile": false }, + { "id": "chips3", "fg": 1291, "rotates": false, "multitile": false }, + { "id": "chips", "fg": 1291, "rotates": false, "multitile": false }, + { "id": "chocolate", "fg": 1299, "rotates": false, "multitile": false }, + { "id": "choco_coffee_beans", "fg": 1285, "rotates": false, "multitile": false }, + { "id": "choco_coffee_beans", "fg": 1285, "rotates": false, "multitile": false }, + { "id": "chocpretzels", "fg": 1298, "rotates": false, "multitile": false }, + { "id": "choc_pancakes", "fg": 1358, "rotates": false, "multitile": false }, + { "id": "choc_waffles", "fg": 1360, "rotates": false, "multitile": false }, + { "id": "clay_lump", "fg": 1299, "rotates": false, "multitile": false }, + { "id": "coconut", "fg": 1378, "rotates": false, "multitile": false }, + { "id": "coffee_bean", "fg": 1285, "rotates": false, "multitile": false }, + { "id": "coffee_raw", "fg": 1356, "rotates": false, "multitile": false }, + { "id": "cola_meth", "fg": 932, "rotates": false, "multitile": false }, + { "id": "con_milk", "fg": 1343, "rotates": false, "multitile": false }, + { "id": "cooked_burrito", "fg": 1347, "rotates": false, "multitile": false }, + { "id": "cooked_dinner", "fg": 1300, "rotates": false, "multitile": false }, + { "id": "cookies", "fg": 1367, "rotates": false, "multitile": false }, + { "id": "cornbread", "fg": 1324, "rotates": false, "multitile": false }, + { "id": "corndogs_cooked", "fg": 1331, "rotates": false, "multitile": false }, + { "id": "corndogs_frozen", "fg": 1331, "rotates": false, "multitile": false }, + { "id": "cornmeal", "fg": 1374, "rotates": false, "multitile": false }, + { "id": "corn", "fg": 1317, "rotates": false, "multitile": false }, + { "id": "cotton_ball", "fg": 759, "rotates": false, "multitile": false }, + { "id": "cotton_boll", "fg": 1384, "rotates": false, "multitile": false }, + { "id": "crackers", "fg": 1361, "rotates": false, "multitile": false }, + { "id": "cracklins", "fg": 1320, "rotates": false, "multitile": false }, + { "id": "cranberries", "fg": 1309, "bg": 1935, "rotates": false }, + { "id": "crispycran", "fg": 937, "rotates": false, "multitile": false }, + { "id": "cucumber", "fg": 1314, "rotates": false, "multitile": false }, + { "id": "currywurst", "fg": 1330, "rotates": false, "multitile": false }, + { "id": "curry_meat", "fg": 1409, "rotates": false, "multitile": false }, + { "id": "curry_powder", "fg": 1296, "rotates": false, "multitile": false }, + { "id": "dahlia_baked", "fg": 755, "rotates": false, "multitile": false }, + { "id": "dahlia_root", "fg": 755, "rotates": false, "multitile": false }, + { "id": "dandelion_cooked", "fg": 1284, "rotates": false, "multitile": false }, + { "id": "dandelion_fried", "fg": 1402, "rotates": false, "multitile": false }, + { "id": "datura_seed", "fg": 1285, "rotates": false, "multitile": false }, + { "id": "datura_seed", "fg": 1285, "rotates": false, "multitile": false }, + { "id": "deluxe_beansnrice", "fg": 1375, "rotates": false, "multitile": false }, + { "id": "deluxe_beans", "fg": 1375, "rotates": false, "multitile": false }, + { "id": "deluxe_eggs", "fg": 1292, "rotates": false, "multitile": false }, + { "id": "deluxe_rice", "fg": 1374, "rotates": false, "multitile": false }, + { "id": "deluxe_veggy_beansnrice", "fg": 1375, "rotates": false, "multitile": false }, + { "id": "deluxe_veggy_beans", "fg": 1375, "rotates": false, "multitile": false }, + { "id": "deluxe_veggy_rice", "fg": 1374, "rotates": false, "multitile": false }, + { "id": "diazepam", "fg": 1269, "rotates": false, "multitile": false }, + { "id": "disinfectant", "fg": 931, "rotates": false, "multitile": false }, + { "id": "dogbane", "fg": 1278, "rotates": false, "multitile": false }, + { "id": "dried_salad", "fg": 1284, "rotates": false, "multitile": false }, + { "id": "drink_boozeberry", "fg": 1386, "rotates": false, "multitile": false }, + { "id": "drink_strawberry_surprise", "fg": 937, "rotates": false, "multitile": false }, + { "id": "dry_beans", "fg": 1311, "rotates": false, "multitile": false }, + { "id": "dry_fish", "fg": 908, "rotates": false, "multitile": false }, + { "id": "dry_fruit", "fg": 1279, "rotates": false, "multitile": false }, + { "id": "dry_hflesh", "fg": 1296, "rotates": false, "multitile": false }, + { "id": "dry_meat", "fg": 1296, "rotates": false, "multitile": false }, + { "id": "dry_meat_tainted", "fg": 1279, "rotates": false, "multitile": false }, + { "id": "dry_mushroom", "fg": 1375, "rotates": false, "multitile": false }, + { "id": "dry_rice", "fg": 348, "rotates": false, "multitile": false }, + { "id": "dry_veggy", "fg": 1284, "rotates": false, "multitile": false }, + { "id": "dry_veggy_tainted", "fg": 1279, "rotates": false, "multitile": false }, + { "id": "egg_bird", "fg": 1348, "rotates": false, "multitile": false }, + { "id": "egg_reptile", "fg": 1341, "rotates": false, "multitile": false }, + { "id": "fat", "fg": 1338, "rotates": false, "multitile": false }, + { "id": "fat_tainted", "fg": 1292, "rotates": false, "multitile": false }, + { "id": "fchicken", "fg": 1328, "rotates": false, "multitile": false }, + { "id": "fertilizer_commercial", "fg": 1374, "rotates": false, "multitile": false }, + { "id": "fetus", "fg": 1338, "rotates": false, "multitile": false }, + { "id": "fish", "fg": 1305, "rotates": false, "multitile": false }, + { "id": "fish_bait_bread", "fg": 1350, "rotates": false, "multitile": false }, + { "id": "fish_bait_fish", "fg": 1305, "rotates": false, "multitile": false }, + { "id": "fish_bait_meat", "fg": 1305, "rotates": false, "multitile": false }, + { "id": "fish_bait_veggy", "fg": 1322, "rotates": false, "multitile": false }, + { "id": "fish_canned", "fg": 1323, "rotates": false, "multitile": false }, + { "id": "fish_cooked", "fg": 1319, "rotates": false, "multitile": false }, + { "id": "fish_fried", "fg": 1324, "rotates": false, "multitile": false }, + { "id": "fish_pickled", "fg": 1319, "rotates": false, "multitile": false }, + { "id": "fish_sandwich", "fg": 1327, "rotates": false, "multitile": false }, + { "id": "fish_smoked", "fg": 1322, "rotates": false, "multitile": false }, + { "id": "fish_vac", "fg": 1319, "rotates": false, "multitile": false }, + { "id": "flour", "fg": 1343, "rotates": false, "multitile": false }, + { "id": "fried_spam", "fg": 1305, "rotates": false, "multitile": false }, + { "id": "fries", "fg": 1380, "rotates": false, "multitile": false }, + { "id": "frozen_burrito", "fg": 1347, "rotates": false, "multitile": false }, + { "id": "frozen_dinner", "fg": 1318, "rotates": false, "multitile": false }, + { "id": "fruit_cooked", "fg": 1325, "rotates": false, "multitile": false }, + { "id": "fruit_leather", "fg": 1305, "rotates": false, "multitile": false }, + { "id": "fruit_pancakes", "fg": 1358, "rotates": false, "multitile": false }, + { "id": "fruit_waffles", "fg": 1359, "rotates": false, "multitile": false }, + { "id": "fruit_wine", "fg": 937, "rotates": false, "multitile": false }, + { "id": "fungal_seeds", "fg": 1370, "rotates": false, "multitile": false }, + { "id": "fungicide", "fg": 1250, "rotates": false, "multitile": false }, + { "id": "grahmcrackers", "fg": 1361, "rotates": false, "multitile": false }, + { "id": "granola", "fg": 1375, "rotates": false, "multitile": false }, + { "id": "grapefruit", "fg": 1372, "rotates": false, "multitile": false }, + { "id": "grapes", "fg": 1412, "rotates": false, "multitile": false }, + { "id": "gummy_vitamins", "fg": 1302, "rotates": false, "multitile": false }, + { "id": "gum", "fg": 1255, "rotates": false, "multitile": false }, + { "id": "hamburger", "fg": 1750, "rotates": false, "multitile": false }, + { "id": "hardtack", "fg": 1361, "rotates": false, "multitile": false }, + { "id": "hfleshbologna", "fg": 1329, "rotates": false, "multitile": false }, + { "id": "hflesh_vac", "fg": 1296, "rotates": false, "multitile": false }, + { "id": "hobo_helper", "fg": 1375, "rotates": false, "multitile": false }, + { "id": "honeycomb", "fg": 1335, "rotates": false, "multitile": false }, + { "id": "honey_ant", "fg": 1372, "rotates": false, "multitile": false }, + { "id": "honey_bottled", "fg": 936, "rotates": false, "multitile": false }, + { "id": "hops", "fg": 749, "rotates": false, "multitile": false }, + { "id": "horseradish", "fg": 1343, "rotates": false, "multitile": false }, + { "id": "hotdogs_cooked", "fg": 1330, "rotates": false, "multitile": false }, + { "id": "hotdogs_frozen", "fg": 1330, "rotates": false, "multitile": false }, + { "id": "human_canned", "fg": 1277, "rotates": false, "multitile": false }, + { "id": "human_cooked", "fg": 1283, "rotates": false, "multitile": false }, + { "id": "human_flesh", "fg": 1277, "rotates": false, "multitile": false }, + { "id": "human_smoked", "fg": 1300, "rotates": false, "multitile": false }, + { "id": "h_currywurst", "fg": 1330, "rotates": false, "multitile": false }, + { "id": "insta_salad", "fg": 1284, "rotates": false, "multitile": false }, + { "id": "irradiated_apple", "fg": 1287, "rotates": false, "multitile": false }, + { "id": "irradiated_apricot", "fg": 1389, "rotates": false, "multitile": false }, + { "id": "irradiated_banana", "fg": 1288, "rotates": false, "multitile": false }, + { "id": "irradiated_blackberries", "fg": 1306, "rotates": false, "multitile": false }, + { "id": "irradiated_blueberries", "fg": 1306, "rotates": false, "multitile": false }, + { "id": "irradiated_broccoli", "fg": 1313, "rotates": false, "multitile": false }, + { "id": "irradiated_carrot", "fg": 1316, "rotates": false, "multitile": false }, + { "id": "irradiated_celery", "fg": 749, "rotates": false, "multitile": false }, + { "id": "irradiated_cherries", "fg": 1373, "rotates": false, "multitile": false }, + { "id": "irradiated_corn", "fg": 1317, "rotates": false, "multitile": false }, + { "id": "irradiated_cranberries", "fg": 1309, "bg": 1935, "rotates": false }, + { "id": "irradiated_cucumber", "fg": 1314, "rotates": false, "multitile": false }, + { "id": "irradiated_grapefruit", "fg": 1372, "rotates": false, "multitile": false }, + { "id": "irradiated_grapes", "fg": 1412, "rotates": false, "multitile": false }, + { "id": "irradiated_kiwi", "fg": 1348, "rotates": false, "multitile": false }, + { "id": "irradiated_lemon", "fg": 1290, "rotates": false, "multitile": false }, + { "id": "irradiated_lettuce", "fg": 1346, "rotates": false, "multitile": false }, + { "id": "irradiated_mango", "fg": 1385, "rotates": false, "multitile": false }, + { "id": "irradiated_melon", "fg": 1384, "rotates": false, "multitile": false }, + { "id": "irradiated_onion", "fg": 1315, "rotates": false, "multitile": false }, + { "id": "irradiated_orange", "fg": 1289, "rotates": false, "multitile": false }, + { "id": "irradiated_papaya", "fg": 1388, "rotates": false, "multitile": false }, + { "id": "irradiated_peach", "fg": 1379, "rotates": false, "multitile": false }, + { "id": "irradiated_pear", "fg": 1371, "rotates": false, "multitile": false }, + { "id": "irradiated_pineapple", "fg": 1377, "rotates": false, "multitile": false }, + { "id": "irradiated_plums", "fg": 1376, "rotates": false, "multitile": false }, + { "id": "irradiated_pomegranate", "fg": 1387, "rotates": false, "multitile": false }, + { "id": "irradiated_raspberries", "fg": 1373, "rotates": false, "multitile": false }, + { "id": "irradiated_rhubarb", "fg": 1411, "rotates": false, "multitile": false }, + { "id": "irradiated_strawberries", "fg": 1308, "rotates": false, "multitile": false }, + { "id": "irradiated_tomato", "fg": 1312, "rotates": false, "multitile": false }, + { "id": "irradiated_watermelon", "fg": 1383, "rotates": false, "multitile": false }, + { "id": "irradiated_zucchini", "fg": 1314, "rotates": false, "multitile": false }, + { "id": "jam_blueberries", "fg": 1390, "rotates": false, "multitile": false }, + { "id": "jam_fruit", "fg": 1325, "rotates": false, "multitile": false }, + { "id": "jam_strawberries", "fg": 1325, "rotates": false, "multitile": false }, + { "id": "jerky", "fg": 1300, "rotates": false, "multitile": false }, + { "id": "jerky_human", "fg": 1300, "rotates": false, "multitile": false }, + { "id": "jihelucake", "fg": 1357, "rotates": false, "multitile": false }, + { "id": "johnnycake", "fg": 1324, "rotates": false, "multitile": false }, + { "id": "juice_pulp", "fg": 1280, "rotates": false, "multitile": false }, + { "id": "kernels", "fg": 1294, "rotates": false, "multitile": false }, + { "id": "ketchup", "fg": 1325, "rotates": false, "multitile": false }, + { "id": "kiwi", "fg": 1348, "rotates": false, "multitile": false }, + { "id": "lard", "fg": 1340, "rotates": false, "multitile": false }, + { "id": "lasagne", "fg": 1368, "rotates": false, "multitile": false }, + { "id": "lasagne_cooked", "fg": 972, "rotates": false, "multitile": false }, + { "id": "lasagne_raw", "fg": 972, "rotates": false, "multitile": false }, + { "id": "leg", "fg": 1339, "rotates": false, "multitile": false }, + { "id": "lemonade", "fg": 1395, "rotates": false }, + { "id": "lemon", "fg": 1290, "rotates": false, "multitile": false }, + { "id": "lettuce", "fg": 1346, "rotates": false, "multitile": false }, + { "id": "luigilasagne", "fg": 1368, "rotates": false, "multitile": false }, + { "id": "lunchmeat", "fg": 1305, "rotates": false, "multitile": false }, + { "id": "lutefisk", "fg": 1323, "rotates": false, "multitile": false }, + { "id": "macaroni_cooked", "fg": 1311, "rotates": false, "multitile": false }, + { "id": "macaroni_helper", "fg": 1375, "rotates": false, "multitile": false }, + { "id": "macaroni_raw", "fg": 1285, "rotates": false, "multitile": false }, + { "id": "maltballs", "fg": 1285, "rotates": false, "multitile": false }, + { "id": "maltballs", "fg": 1285, "rotates": false, "multitile": false }, + { "id": "mango", "fg": 1385, "rotates": false, "multitile": false }, + { "id": "mannwurstgravy", "fg": 1332, "rotates": false, "multitile": false }, + { "id": "mannwurst", "fg": 1330, "rotates": false, "multitile": false }, + { "id": "manwich", "fg": 1750, "rotates": false, "multitile": false }, + { "id": "marloss_berry", "fg": 1342, "rotates": false, "multitile": false }, + { "id": "marloss_gel", "fg": 936, "rotates": false, "multitile": false }, + { "id": "marloss_seed", "fg": 1403, "rotates": false, "multitile": false }, + { "id": "marshmallow", "fg": 1334, "rotates": false, "multitile": false }, + { "id": "material_aluminium_ingot", "fg": 831, "rotates": false, "multitile": false }, + { "id": "material_quicklime", "fg": 348, "rotates": false, "multitile": false }, + { "id": "material_sand", "fg": 908, "rotates": false, "multitile": false }, + { "id": "mayonnaise", "fg": 1343, "rotates": false, "multitile": false }, + { "id": "meal_bone", "fg": 1343, "rotates": false, "multitile": false }, + { "id": "meal_chitin_piece", "fg": 347, "rotates": false, "multitile": false }, + { "id": "meat", "fg": 1277, "rotates": false, "multitile": false }, + { "id": "meat_aspic", "fg": 1305, "rotates": false, "multitile": false }, + { "id": "meat_canned", "fg": 1277, "rotates": false, "multitile": false }, + { "id": "meat_cooked", "fg": 1283, "rotates": false, "multitile": false }, + { "id": "meat_smoked", "fg": 1300, "rotates": false, "multitile": false }, + { "id": "meat_tainted", "fg": 1281, "rotates": false, "multitile": false }, + { "id": "meat_vac", "fg": 1296, "rotates": false, "multitile": false }, + { "id": "melon", "fg": 1384, "rotates": false, "multitile": false }, + { "id": "milk_coffee", "fg": 932, "rotates": false, "multitile": false }, + { "id": "milk_powder", "fg": 348, "rotates": false, "multitile": false }, + { "id": "milk_tea", "fg": 932, "rotates": false, "multitile": false }, + { "id": "mintpatties", "fg": 1378, "rotates": false, "multitile": false }, + { "id": "morel_cooked", "fg": 1303, "rotates": false, "multitile": false }, + { "id": "morel_fried", "fg": 1303, "rotates": false, "multitile": false }, + { "id": "mre_beef", "fg": 1300, "rotates": false, "multitile": false }, + { "id": "mre_beef_box", "fg": 1354, "rotates": false, "multitile": false }, + { "id": "mre_chicken", "fg": 1318, "rotates": false, "multitile": false }, + { "id": "mre_chicken_box", "fg": 1354, "rotates": false, "multitile": false }, + { "id": "mre_hotdogs", "fg": 1320, "rotates": false, "multitile": false }, + { "id": "mre_hotdog_box", "fg": 1354, "rotates": false, "multitile": false }, + { "id": "mre_ravioli", "fg": 1311, "rotates": false, "multitile": false }, + { "id": "mre_ravioli_box", "fg": 1354, "rotates": false, "multitile": false }, + { "id": "mre_veggy", "fg": 1285, "rotates": false, "multitile": false }, + { "id": "mre_veggy_box", "fg": 1354, "rotates": false, "multitile": false }, + { "id": "mushroom", "fg": 1303, "rotates": false, "multitile": false }, + { "id": "mushroom_magic", "fg": 1303, "rotates": false, "multitile": false }, + { "id": "mushroom_morel", "fg": 1303, "rotates": false, "multitile": false }, + { "id": "mushroom_poison", "fg": 1303, "rotates": false, "multitile": false }, + { "id": "mustard", "fg": 936, "rotates": false, "multitile": false }, + { "id": "mycus_fruit", "fg": 1405, "rotates": false, "multitile": false }, + { "id": "nachosc", "fg": 1333, "rotates": false, "multitile": false }, + { "id": "nachoshc", "fg": 1333, "rotates": false, "multitile": false }, + { "id": "nachoshf", "fg": 1333, "rotates": false, "multitile": false }, + { "id": "nachosmc", "fg": 1333, "rotates": false, "multitile": false }, + { "id": "nachosm", "fg": 1333, "rotates": false, "multitile": false }, + { "id": "nachos", "fg": 1333, "rotates": false, "multitile": false }, + { "id": "neccowafers", "fg": 1302, "rotates": false, "multitile": false }, + { "id": "noodles_fast", "fg": 1324, "rotates": false, "multitile": false }, + { "id": "nyquil", "fg": 1272, "rotates": false }, + { "id": "oatmeal", "fg": 1267, "rotates": false, "multitile": false }, + { "id": "oatmeal_cooked", "fg": 1293, "rotates": false, "multitile": false }, + { "id": "oatmeal_deluxe", "fg": 1293, "rotates": false, "multitile": false }, + { "id": "onigiri", "fg": 1334, "rotates": false, "multitile": false }, + { "id": "onion", "fg": 1315, "rotates": false, "multitile": false }, + { "id": "onion_rings", "fg": 1381, "rotates": false, "multitile": false }, + { "id": "orange", "fg": 1289, "rotates": false, "multitile": false }, + { "id": "pancakes", "fg": 1358, "rotates": false, "multitile": false }, + { "id": "papaya", "fg": 1388, "rotates": false, "multitile": false }, + { "id": "peach", "fg": 1379, "rotates": false, "multitile": false }, + { "id": "peanutbutter", "fg": 1375, "rotates": false, "multitile": false }, + { "id": "pear", "fg": 1371, "rotates": false, "multitile": false }, + { "id": "pelmeni", "fg": 1311, "rotates": false, "multitile": false }, + { "id": "pemmican", "fg": 1322, "rotates": false, "multitile": false }, + { "id": "pickle", "fg": 1314, "rotates": false, "multitile": false }, + { "id": "pie", "fg": 1351, "rotates": false, "multitile": false }, + { "id": "pie_human", "fg": 1351, "rotates": false, "multitile": false }, + { "id": "pie_meat", "fg": 1351, "rotates": false, "multitile": false }, + { "id": "pills_sleep", "fg": 1254, "rotates": false, "multitile": false }, + { "id": "pineapple", "fg": 1377, "rotates": false, "multitile": false }, + { "id": "pine_bough", "fg": 1264, "rotates": false, "multitile": false }, + { "id": "pine_nuts", "fg": 1267, "rotates": false, "multitile": false }, + { "id": "pizza_human", "fg": 1353, "rotates": false, "multitile": false }, + { "id": "pizza_meat", "fg": 1353, "rotates": false, "multitile": false }, + { "id": "pizza_veggy", "fg": 1352, "rotates": false, "multitile": false }, + { "id": "plant_sac", "fg": 1276, "rotates": false, "multitile": false }, + { "id": "plums", "fg": 1376, "rotates": false, "multitile": false }, + { "id": "pomegranate", "fg": 1387, "rotates": false, "multitile": false }, + { "id": "popcorn2", "fg": 1295, "rotates": false, "multitile": false }, + { "id": "popcorn3", "fg": 1295, "rotates": false, "multitile": false }, + { "id": "popcorn", "fg": 1295, "rotates": false, "multitile": false }, + { "id": "porkstick", "fg": 1320, "rotates": false, "multitile": false }, + { "id": "pork_beans", "fg": 1375, "rotates": false, "multitile": false }, + { "id": "potato_baked", "fg": 1349, "rotates": false, "multitile": false }, + { "id": "potato_irradiated", "fg": 1348, "rotates": false, "multitile": false }, + { "id": "potato_raw", "fg": 1348, "rotates": false, "multitile": false }, + { "id": "powder_candy", "fg": 1345, "rotates": false, "multitile": false }, + { "id": "powder_eggs", "fg": 1374, "rotates": false, "multitile": false }, + { "id": "pretzels", "fg": 1298, "rotates": false, "multitile": false }, + { "id": "protein_drink", "fg": 1301, "rotates": false, "multitile": false }, + { "id": "protein_powder", "fg": 1267, "rotates": false, "multitile": false }, + { "id": "prozac", "fg": 1262, "rotates": false, "multitile": false }, + { "id": "pudding", "fg": 1343, "rotates": false, "multitile": false }, + { "id": "raspberries", "fg": 1373, "rotates": false, "multitile": false }, + { "id": "ravioli", "fg": 1311, "rotates": false, "multitile": false }, + { "id": "raw_beans", "fg": 1285, "rotates": false, "multitile": false }, + { "id": "raw_dandelion", "fg": 1402, "rotates": false, "multitile": false }, + { "id": "rehydrated_fish", "fg": 348, "rotates": false, "multitile": false }, + { "id": "rehydrated_fruit", "fg": 1280, "rotates": false, "multitile": false }, + { "id": "rehydrated_hflesh", "fg": 1297, "rotates": false, "multitile": false }, + { "id": "rehydrated_meat", "fg": 1297, "rotates": false, "multitile": false }, + { "id": "rehydrated_veggy", "fg": 1286, "rotates": false, "multitile": false }, + { "id": "rehydrated_veggy", "fg": 1286, "rotates": false, "multitile": false }, + { "id": "rhubarb", "fg": 1411, "rotates": false, "multitile": false }, + { "id": "rice_cooked", "fg": 348, "rotates": false, "multitile": false }, + { "id": "roasted_coffee_bean", "fg": 1285, "rotates": false, "multitile": false }, + { "id": "royal_beef", "fg": 1283, "rotates": false, "multitile": false }, + { "id": "royal_jelly", "fg": 1337, "rotates": false, "multitile": false }, + { "id": "salted_fish", "fg": 1323, "rotates": false, "multitile": false }, + { "id": "salt", "fg": 1343, "rotates": false, "multitile": false }, + { "id": "sandwich_cheese", "fg": 1327, "rotates": false, "multitile": false }, + { "id": "sandwich_cheese_grilled", "fg": 1327, "rotates": false, "multitile": false }, + { "id": "sandwich_human", "fg": 1750, "rotates": false, "multitile": false }, + { "id": "sandwich_jam", "fg": 1344, "rotates": false, "multitile": false }, + { "id": "sandwich_pbh", "fg": 1327, "rotates": false, "multitile": false }, + { "id": "sandwich_pbj", "fg": 1344, "rotates": false, "multitile": false }, + { "id": "sandwich_pb", "fg": 1750, "rotates": false, "multitile": false }, + { "id": "sandwich_sauce", "fg": 1750, "rotates": false, "multitile": false }, + { "id": "sashimi", "fg": 1305, "rotates": false, "multitile": false }, + { "id": "sauce_pesto", "fg": 1326, "rotates": false, "multitile": false }, + { "id": "sauce_red", "fg": 1325, "rotates": false, "multitile": false }, + { "id": "sausagegravy", "fg": 1332, "rotates": false, "multitile": false }, + { "id": "sausage", "fg": 1330, "rotates": false, "multitile": false }, + { "id": "scrambled_eggs", "fg": 1292, "rotates": false, "multitile": false }, + { "id": "seasoning_italian", "fg": 1326, "rotates": false, "multitile": false }, + { "id": "seasoning_salt", "fg": 1267, "rotates": false, "multitile": false }, + { "id": "seed_barley", "fg": 1311, "rotates": false, "multitile": false }, + { "id": "seed_blueberries", "fg": 1307, "rotates": false, "multitile": false }, + { "id": "seed_broccoli", "fg": 1285, "rotates": false, "multitile": false }, + { "id": "seed_carrot", "fg": 1311, "rotates": false, "multitile": false }, + { "id": "seed_corn", "fg": 1294, "rotates": false, "multitile": false }, + { "id": "seed_cotton_boll", "fg": 1311, "rotates": false, "multitile": false }, + { "id": "seed_dogbane", "fg": 1311, "rotates": false, "multitile": false }, + { "id": "seed_hops", "fg": 755, "rotates": false, "multitile": false }, + { "id": "seed_lettuce", "fg": 1311, "rotates": false, "multitile": false }, + { "id": "seed_onion", "fg": 1285, "rotates": false, "multitile": false }, + { "id": "seed_strawberries", "fg": 1309, "rotates": false, "multitile": false }, + { "id": "seed_sugar_beet", "fg": 1311, "rotates": false, "multitile": false }, + { "id": "seed_tomato", "fg": 1311, "rotates": false, "multitile": false }, + { "id": "seed_weed", "fg": 1311, "rotates": false, "multitile": false }, + { "id": "seed_wheat", "fg": 1311, "rotates": false, "multitile": false }, + { "id": "slime_scrap", "fg": 935, "rotates": false, "multitile": false }, + { "id": "sloppyjoe", "fg": 1750, "rotates": false, "multitile": false }, + { "id": "smores", "fg": 1750, "rotates": false, "multitile": false }, + { "id": "smoxygen_tank", "fg": 1253, "rotates": false }, + { "id": "soup_chicken", "fg": 1301, "rotates": false, "multitile": false }, + { "id": "soup_dumplings", "fg": 1301, "rotates": false, "multitile": false }, + { "id": "soup_fish", "fg": 1301, "rotates": false, "multitile": false }, + { "id": "soup_mushroom", "fg": 1301, "rotates": false, "multitile": false }, + { "id": "soup_tomato", "fg": 1409, "rotates": false, "multitile": false }, + { "id": "soysauce", "fg": 932, "rotates": false, "multitile": false }, + { "id": "spaghetti_bolognese", "fg": 1365, "rotates": false, "multitile": false }, + { "id": "spaghetti_cooked", "fg": 1321, "rotates": false, "multitile": false }, + { "id": "spaghetti_human", "fg": 1365, "rotates": false, "multitile": false }, + { "id": "spaghetti_pesto", "fg": 1366, "rotates": false, "multitile": false }, + { "id": "spaghetti_raw", "fg": 1320, "rotates": false, "multitile": false }, + { "id": "spider_egg", "fg": 759, "rotates": false, "multitile": false }, + { "id": "strawberries", "fg": 1308, "rotates": false, "multitile": false }, + { "id": "strawberries_cooked", "fg": 1325, "rotates": false, "multitile": false }, + { "id": "sugar", "fg": 1343, "rotates": false, "multitile": false }, + { "id": "sugar_beet", "fg": 757, "rotates": false, "multitile": false }, + { "id": "sugar_fried", "fg": 1356, "rotates": false, "multitile": false }, + { "id": "sushi_fishroll", "fg": 1404, "rotates": false, "multitile": false }, + { "id": "sushi_meatroll", "fg": 1404, "rotates": false, "multitile": false }, + { "id": "sushi_rice", "fg": 348, "rotates": false, "multitile": false }, + { "id": "sushi_veggyroll", "fg": 1404, "rotates": false, "multitile": false }, + { "id": "taco", "fg": 1369, "rotates": false, "multitile": false }, + { "id": "taint_tornado", "fg": 1409, "rotates": false, "multitile": false }, + { "id": "tallow", "fg": 1340, "rotates": false, "multitile": false }, + { "id": "tallow_tainted", "fg": 831, "rotates": false, "multitile": false }, + { "id": "tea_bark", "fg": 932, "rotates": false, "multitile": false }, + { "id": "tea_raw", "fg": 1326, "rotates": false, "multitile": false }, + { "id": "tiotaco", "fg": 1369, "rotates": false, "multitile": false }, + { "id": "toastem2", "fg": 1350, "rotates": false, "multitile": false }, + { "id": "toastem3", "fg": 1350, "rotates": false, "multitile": false }, + { "id": "toastem", "fg": 1350, "rotates": false, "multitile": false }, + { "id": "toasterpastryfrozen", "fg": 1350, "rotates": false, "multitile": false }, + { "id": "toasterpastry", "fg": 1322, "rotates": false, "multitile": false }, + { "id": "tomato", "fg": 1312, "rotates": false, "multitile": false }, + { "id": "tool_rocket_candy", "fg": 1383, "rotates": false, "multitile": false }, + { "id": "tool_rocket_candy_act", "fg": 1383, "rotates": false, "multitile": false }, + { "id": "unfinished_charcoal", "fg": 1322, "rotates": false, "multitile": false }, + { "id": "veggy", "fg": 1278, "rotates": false, "multitile": false }, + { "id": "veggy_canned", "fg": 1284, "rotates": false, "multitile": false }, + { "id": "veggy_cooked", "fg": 1285, "rotates": false, "multitile": false }, + { "id": "veggy_cooked", "fg": 1285, "rotates": false, "multitile": false }, + { "id": "veggy_salad", "fg": 1284, "rotates": false, "multitile": false }, + { "id": "veggy_tainted", "fg": 1282, "rotates": false, "multitile": false }, + { "id": "veggy_vac", "fg": 1284, "rotates": false, "multitile": false }, + { "id": "veggy_wild", "fg": 1278, "rotates": false, "multitile": false }, + { "id": "veggy_wild_cooked", "fg": 1285, "rotates": false, "multitile": false }, + { "id": "veggy_wild_cooked", "fg": 1285, "rotates": false, "multitile": false }, + { "id": "vibrator", "fg": 1332, "rotates": false, "multitile": false }, + { "id": "waffles", "fg": 1359, "rotates": false, "multitile": false }, + { "id": "wastebread", "fg": 1350, "rotates": false, "multitile": false }, + { "id": "watermelon", "fg": 1383, "rotates": false, "multitile": false }, + { "id": "wheat", "fg": 1310, "rotates": false, "multitile": false }, + { "id": "wild_herbs", "fg": 1284, "rotates": false, "multitile": false }, + { "id": "yeast", "fg": 348, "rotates": false, "multitile": false }, + { "id": "yoghurt", "fg": 1343, "rotates": false, "multitile": false }, + { "id": "zucchini", "fg": 1314, "rotates": false, "multitile": false }, + { + "id": "vp_aisle_horizontal", + "fg": 1472, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_aisle_horizontal", + "fg": 1472, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_aisle_lights", + "fg": 1448, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_aisle_vertical", + "fg": 1490, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_aisle_vertical", + "fg": 1490, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_alternator_car", + "fg": 1424, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_alternator_motorbike", + "fg": 1424, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_alternator_truck", + "fg": 1424, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_basketlg", + "fg": 1469, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_basketlg_folding", + "fg": 1469, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_basketsm", + "fg": 1469, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_battery_car", + "fg": 1499, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_battery_motorbike", + "fg": 1499, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_battery_truck", + "fg": 1499, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_bed", + "fg": 1454, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_blade_horizontal", + "fg": 1459, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1505 } ] + }, + { + "id": "vp_blade_vertical", + "fg": 2128, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1505 } ] + }, + { + "id": "vp_board_horizontal", + "fg": 1484, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_board_ne", + "fg": 1485, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_board_nw", + "fg": 1487, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_board_se", + "fg": 1486, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_board_sw", + "fg": 1488, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_board_vertical", + "fg": 1483, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_box", + "fg": 1469, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_cam_control", + "fg": 1442, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_cargo_space", + "fg": 1481, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_chemlab", + "fg": 915, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1479 } ] + }, + { + "id": "vp_controls", + "fg": 881, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_craft_rig", + "fg": 1478, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1479 } ] + }, + { "id": "vp_diesel_engine_i6", "fg": 873, "rotates": true }, + { "id": "vp_diesel_engine_v6", "fg": 873, "rotates": true }, + { "id": "vp_diesel_engine_v8", "fg": 873, "rotates": true }, + { + "id": "vp_diesel_tank", + "fg": 1435, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_diesel_tank_little", + "fg": 1435, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_diesel_tank_small", + "fg": 1435, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_door", + "fg": 1456, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "open", "fg": 1457 }, { "id": "broken", "fg": 1470 } ] + }, + { + "id": "vp_door_internal", + "fg": 1456, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "open", "fg": 1457 }, { "id": "broken", "fg": 1470 } ] + }, + { + "id": "vp_door_motor", + "fg": 1446, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_door_opaque", + "fg": 1456, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "open", "fg": 1457 }, { "id": "broken", "fg": 1470 } ] + }, + { + "id": "vp_door_shutter", + "fg": 1471, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "open", "fg": 1474 }, { "id": "broken", "fg": 1480 } ] + }, + { + "id": "vp_door_sliding", + "fg": 1471, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "open", "fg": 1474 }, { "id": "broken", "fg": 1480 } ] + }, + { + "id": "vp_door_trunk", + "fg": 1471, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "open", "fg": 1474 }, { "id": "broken", "fg": 1480 } ] + }, + { + "id": "vp_door_wood", + "fg": 1437, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "open", "fg": 1438 }, { "id": "broken", "fg": 1439 } ] + }, + { + "id": "vp_drive_by_wire_controls", + "fg": 1443, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { "id": "vp_engine_1cyl", "fg": 873, "rotates": true }, + { "id": "vp_engine_1cyl_small", "fg": 873, "rotates": true }, + { "id": "vp_engine_electric", "fg": 873, "rotates": true }, + { "id": "vp_engine_electric_large", "fg": 873, "rotates": true }, + { "id": "vp_engine_electric_small", "fg": 873, "rotates": true }, + { + "id": "vp_engine_foot_crank", + "fg": 1468, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_engine_gas_1cyl", + "fg": 1468, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_engine_gas_i4", + "fg": 1468, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_engine_gas_v2", + "fg": 1468, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_engine_gas_v6", + "fg": 1468, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_engine_gas_v8", + "fg": 1468, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { "id": "vp_engine_inline4", "fg": 873, "rotates": true }, + { + "id": "vp_engine_motor", + "fg": 1468, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_engine_motor_large", + "fg": 1468, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_engine_plasma", + "fg": 1468, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { "id": "vp_engine_v12", "fg": 873, "rotates": true }, + { "id": "vp_engine_v6", "fg": 873, "rotates": true }, + { "id": "vp_engine_v8", "fg": 873, "rotates": true }, + { "id": "vp_engine_vtwin", "fg": 873, "rotates": true }, + { + "id": "vp_external_diesel_tank", + "fg": 1436, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_external_gas_tank", + "fg": 1529, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_flamethrower", + "fg": 1508, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_floodlight", + "fg": 1510, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_folding_frame", + "fg": 1515, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1505 } ] + }, + { + "id": "vp_folding_seat", + "fg": 1482, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_foot_pedals", + "fg": 1468, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_frame_cover", + "fg": 1468, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_frame_cross", + "fg": 1489, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { "id": "vp_frame_handle", "fg": 1468, "rotates": true }, + { + "id": "vp_frame_horizontal", + "fg": 1496, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_frame_horizontal_2", + "fg": 1496, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_frame_ne", + "fg": 1495, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_frame_nw", + "fg": 1495, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_frame_se", + "fg": 1495, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_frame_sw", + "fg": 1495, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_frame_vertical", + "fg": 1495, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_frame_vertical_2", + "fg": 1495, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_frame_wood_cover", + "fg": 1417, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_frame_wood_cross", + "fg": 1416, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_frame_wood_handle", + "fg": 1417, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_frame_wood_horizontal", + "fg": 1415, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_frame_wood_horizontal_2", + "fg": 1415, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_frame_wood_light_cover", + "fg": 1417, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_frame_wood_light_cross", + "fg": 1416, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_frame_wood_light_handle", + "fg": 1417, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_frame_wood_light_horizontal", + "fg": 1415, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_frame_wood_light_horizontal_2", + "fg": 1415, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_frame_wood_light_ne", + "fg": 1414, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_frame_wood_light_nw", + "fg": 1414, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_frame_wood_light_se", + "fg": 1414, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_frame_wood_light_sw", + "fg": 1414, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_frame_wood_light_vertical", + "fg": 1414, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_frame_wood_light_vertical_2", + "fg": 1414, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_frame_wood_ne", + "fg": 1414, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_frame_wood_nw", + "fg": 1414, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_frame_wood_se", + "fg": 1414, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_frame_wood_sw", + "fg": 1414, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_frame_wood_vertical", + "fg": 1414, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_frame_wood_vertical_2", + "fg": 1414, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_fuel_tank_batt", + "fg": 1499, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_fuel_tank_gas", + "fg": 1498, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_fuel_tank_hydrogen", + "fg": 1501, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_fuel_tank_plut", + "fg": 1500, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_fuel_tank_water", + "fg": 1502, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_fusion_gun", + "fg": 1511, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1450 } ] + }, + { + "id": "vp_gas_tank", + "fg": 1498, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_gas_tank_little", + "fg": 1498, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_gas_tank_small", + "fg": 1498, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_halfboard_cover", + "fg": 1468, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_halfboard_cross", + "fg": 1503, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_halfboard_horizontal", + "fg": 1484, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_halfboard_horizontal_2", + "fg": 1484, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_halfboard_ne", + "fg": 1485, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_halfboard_nw", + "fg": 1487, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_halfboard_se", + "fg": 1486, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_halfboard_sw", + "fg": 1488, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_halfboard_vertical", + "fg": 1483, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_halfboard_vertical_2", + "fg": 1483, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_hand_rims", + "fg": 783, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { "id": "vp_hard_plate", "fg": 1494, "rotates": true }, + { + "id": "vp_hatch", + "fg": 1471, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "open", "fg": 1474 }, { "id": "broken", "fg": 1480 } ] + }, + { + "id": "vp_hdboard_horizontal", + "fg": 1522, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1519 } ] + }, + { + "id": "vp_hdboard_ne", + "fg": 1523, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1519 } ] + }, + { + "id": "vp_hdboard_nw", + "fg": 1525, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1519 } ] + }, + { + "id": "vp_hdboard_se", + "fg": 1524, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1519 } ] + }, + { + "id": "vp_hdboard_sw", + "fg": 1526, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1519 } ] + }, + { + "id": "vp_hdboard_vertical", + "fg": 1521, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1519 } ] + }, + { + "id": "vp_hdframe_cover", + "fg": 1520, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1519 } ] + }, + { + "id": "vp_hdframe_cross", + "fg": 1518, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1519 } ] + }, + { + "id": "vp_hdframe_horizontal", + "fg": 1517, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1519 } ] + }, + { + "id": "vp_hdframe_horizontal_2", + "fg": 1517, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1519 } ] + }, + { + "id": "vp_hdframe_ne", + "fg": 1516, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1519 } ] + }, + { + "id": "vp_hdframe_nw", + "fg": 1516, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1519 } ] + }, + { + "id": "vp_hdframe_se", + "fg": 1516, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1519 } ] + }, + { + "id": "vp_hdframe_sw", + "fg": 1516, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1519 } ] + }, + { + "id": "vp_hdframe_vertical", + "fg": 1516, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1519 } ] + }, + { + "id": "vp_hdframe_vertical_2", + "fg": 1516, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1519 } ] + }, + { + "id": "vp_hdhatch", + "fg": 1426, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "open", "fg": 1427 }, { "id": "broken", "fg": 1428 } ] + }, + { + "id": "vp_hdroof", + "fg": 1425, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_headlight", + "fg": 1510, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_headlight_reinforced", + "fg": 916, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_head_light", + "fg": 1510, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_horn_bicycle", + "fg": 1513, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_horn_big", + "fg": 1512, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_horn_car", + "fg": 1512, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_hydrogen_tank", + "fg": 1501, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_jumper_cable", + "fg": 1433, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_jumper_cable_heavy", + "fg": 1433, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_kitchen_unit", + "fg": 865, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1479 } ] + }, + { + "id": "vp_laser_gun", + "fg": 1511, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1450 } ] + }, + { + "id": "vp_light_blue", + "fg": 872, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_light_red", + "fg": 871, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_lit_aisle_horizontal", + "fg": 1447, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_lit_aisle_horizontal", + "fg": 1447, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_lit_aisle_vertical", + "fg": 1448, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_lit_aisle_vertical", + "fg": 1448, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_m249", + "fg": 1507, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1451 } ] + }, + { + "id": "vp_medium_storage_battery", + "fg": 1499, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_metal_wheel", + "fg": 1465, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1475 } ] + }, + { + "id": "vp_minifridge", + "fg": 866, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1479 } ] + }, + { + "id": "vp_minireactor", + "fg": 1500, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_mounted_browning", + "fg": 1533, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1519 } ] + }, + { + "id": "vp_mounted_mk19", + "fg": 1533, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1519 } ] + }, + { + "id": "vp_mounted_rm298", + "fg": 1449, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_mounted_rm614", + "fg": 1449, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_muffler", + "fg": 1506, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_muffler", + "fg": 883, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_omnicam", + "fg": 1444, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_plasmagun", + "fg": 1509, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1451 } ] + }, + { + "id": "vp_plasma_gun", + "fg": 1509, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1451 } ] + }, + { "id": "vp_plating_bone", "fg": 1440, "rotates": true }, + { "id": "vp_plating_chitin", "fg": 1491, "rotates": true }, + { "id": "vp_plating_hard", "fg": 1494, "rotates": true }, + { "id": "vp_plating_military", "fg": 1528, "rotates": true }, + { "id": "vp_plating_spiked", "fg": 1493, "rotates": true }, + { "id": "vp_plating_steel", "fg": 1491, "rotates": true }, + { "id": "vp_plating_superalloy", "fg": 1492, "rotates": true }, + { "id": "vp_plating_wood", "fg": 1527, "rotates": true }, + { + "id": "vp_recharge_station", + "fg": 917, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1479 } ] + }, + { + "id": "vp_reclining_seat", + "fg": 1482, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_reinforced_solar_panel", + "fg": 877, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1477 } ] + }, + { + "id": "vp_reinforced_solar_panel_v2", + "fg": 877, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1477 } ] + }, + { + "id": "vp_reinforced_windshield", + "fg": 1463, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1462 } ] + }, + { + "id": "vp_robot_controls", + "fg": 1445, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_roller_drum", + "fg": 1432, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_roof", + "fg": 1455, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_roof_cloth", + "fg": 1455, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_roof_wood", + "fg": 1455, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_saddle", + "fg": 1482, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_seatbelt", + "fg": 883, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 882 } ] + }, + { + "id": "vp_seatbelt_heavyduty", + "fg": 1530, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 882 } ] + }, + { + "id": "vp_seat", + "fg": 1482, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_seat_wood", + "fg": 1441, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_small_storage_battery", + "fg": 1499, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_solar_panel", + "fg": 876, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1476 } ] + }, + { + "id": "vp_solar_panel_v2", + "fg": 876, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1476 } ] + }, + { + "id": "vp_solar_panel_v3", + "fg": 876, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1476 } ] + }, + { "id": "vp_spiked_plate", "fg": 1493, "rotates": true }, + { + "id": "vp_spike", + "fg": 1461, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1505 } ] + }, + { + "id": "vp_spike_horizontal", + "fg": 1460, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1505 } ] + }, + { + "id": "vp_spike_vertical", + "fg": 1461, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1505 } ] + }, + { + "id": "vp_spike_wood", + "fg": 1973, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { "id": "vp_steel_plate", "fg": 1491, "rotates": true }, + { + "id": "vp_stereo", + "fg": 1429, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1479 } ] + }, + { + "id": "vp_storage_battery", + "fg": 1499, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_storage_battery_mount", + "fg": 1452, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_storage_battery_removable", + "fg": 1499, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_stowboard_horizontal", + "fg": 1534, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_stowboard_vertical", + "fg": 1535, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { "id": "vp_superalloy_plate", "fg": 1492, "rotates": true }, + { + "id": "vp_tracker", + "fg": 926, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_travois", + "fg": 1434, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_trunk", + "fg": 1473, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_trunk_floor", + "fg": 1481, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_vehicle_alarm", + "fg": 926, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_veh_forge", + "fg": 879, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1479 } ] + }, + { + "id": "vp_veh_table", + "fg": 914, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_v_curtain", + "fg": 1531, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_watercannon", + "fg": 1509, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1453 } ] + }, + { + "id": "vp_water_faucet", + "fg": 1532, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1479 } ] + }, + { + "id": "vp_water_tank", + "fg": 1502, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1497 } ] + }, + { + "id": "vp_welding_rig", + "fg": 878, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1479 } ] + }, + { + "id": "vp_wheel", + "fg": 1465, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1475 } ] + }, + { + "id": "vp_wheel_armor", + "fg": 1514, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1475 } ] + }, + { + "id": "vp_wheel_bicycle", + "fg": 1467, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1475 } ] + }, + { + "id": "vp_wheel_caster", + "fg": 1467, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1475 } ] + }, + { + "id": "vp_wheel_motorbike", + "fg": 1464, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1475 } ] + }, + { + "id": "vp_wheel_small", + "fg": 1467, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1475 } ] + }, + { + "id": "vp_wheel_underbody", + "fg": 1465, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1475 } ] + }, + { + "id": "vp_wheel_unicycle", + "fg": 1464, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1475 } ] + }, + { + "id": "vp_wheel_wheelchair", + "fg": 1464, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1475 } ] + }, + { + "id": "vp_wheel_wide", + "fg": 1466, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1475 } ] + }, + { + "id": "vp_wheel_wood", + "fg": 1430, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_wheel_wood_b", + "fg": 1431, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_windshield", + "fg": 1458, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1462 } ] + }, + { + "id": "vp_wing_mirror", + "fg": 1413, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_woodboard_horizontal", + "fg": 1419, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_woodboard_ne", + "fg": 1420, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_woodboard_nw", + "fg": 1422, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_woodboard_se", + "fg": 1421, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_woodboard_sw", + "fg": 1423, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_woodboard_vertical", + "fg": 1418, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_woodhalfboard_horizontal", + "fg": 1419, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_woodhalfboard_horizontal_2", + "fg": 1419, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_woodhalfboard_ne", + "fg": 1420, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_woodhalfboard_nw", + "fg": 1422, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_woodhalfboard_se", + "fg": 1421, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_woodhalfboard_sw", + "fg": 1423, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_woodhalfboard_vertical", + "fg": 1418, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_woodhalfboard_vertical_2", + "fg": 1418, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1504 } ] + }, + { + "id": "vp_xlframe_cross", + "fg": 1489, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1505 } ] + }, + { + "id": "vp_xlframe_horizontal", + "fg": 1515, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1505 } ] + }, + { + "id": "vp_xlframe_horizontal_2", + "fg": 1515, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1505 } ] + }, + { + "id": "vp_xlframe_ne", + "fg": 2005, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1505 } ] + }, + { + "id": "vp_xlframe_nw", + "fg": 2005, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1505 } ] + }, + { + "id": "vp_xlframe_se", + "fg": 2005, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1505 } ] + }, + { + "id": "vp_xlframe_sw", + "fg": 2005, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1505 } ] + }, + { + "id": "vp_xlframe_vertical", + "fg": 2005, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1505 } ] + }, + { + "id": "vp_xlframe_vertical_2", + "fg": 2005, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1505 } ] + }, + { + "id": "vp_xlhalfboard_horizontal", + "fg": 1484, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_xlhalfboard_horizontal_2", + "fg": 1484, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_xlhalfboard_ne", + "fg": 1485, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_xlhalfboard_nw", + "fg": 1487, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_xlhalfboard_se", + "fg": 1486, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_xlhalfboard_sw", + "fg": 1488, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_xlhalfboard_vertical", + "fg": 1483, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { + "id": "vp_xlhalfboard_vertical_2", + "fg": 1483, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1979 } ] + }, + { "id": "mon_amigara_horror", "fg": 1549, "rotates": false }, + { "id": "mon_ant", "fg": 1626, "rotates": false }, + { "id": "mon_ant_fungus", "fg": 1629, "rotates": false }, + { "id": "mon_ant_larva", "fg": 1625, "rotates": false }, + { "id": "mon_ant_queen", "fg": 1628, "rotates": false }, + { "id": "mon_ant_soldier", "fg": 1627, "rotates": false }, + { "id": "mon_bat", "fg": 1614, "rotates": false }, + { "id": "mon_bear", "fg": 1620, "rotates": false }, + { "id": "mon_beaver", "fg": 1694, "rotates": false }, + { "id": "mon_beekeeper", "fg": 1655, "rotates": false }, + { "id": "mon_bee", "fg": 1631, "rotates": false }, + { "id": "mon_biollante", "fg": 1666, "rotates": false }, + { "id": "mon_black_rat", "fg": 1695, "rotates": false }, + { "id": "mon_blank", "fg": 1711, "rotates": false }, + { "id": "mon_blob", "fg": 1688, "rotates": false }, + { "id": "mon_blob_brain", "fg": 1560, "rotates": false }, + { "id": "mon_blob_large", "fg": 1708, "rotates": false }, + { "id": "mon_blob_small", "fg": 1689, "rotates": false }, + { "id": "mon_blood_sacrifice", "fg": 1538, "rotates": false }, + { "id": "mon_bobcat", "fg": 1696, "rotates": false }, + { "id": "mon_boomer", "fg": 1647, "rotates": false }, + { "id": "mon_boomer_fungus", "fg": 1648, "rotates": false }, + { "id": "mon_boomer_huge", "fg": 1604, "rotates": false }, + { "id": "mon_breather", "fg": 1713, "rotates": false }, + { "id": "mon_breather_hub", "fg": 1712, "rotates": false }, + { "id": "mon_broken_cyborg", "fg": 1699, "rotates": false }, + { "id": "mon_cat", "fg": 1624, "rotates": false }, + { "id": "mon_centipede", "fg": 1737, "rotates": false }, + { "id": "mon_centipede_giant", "fg": 1678, "rotates": false }, + { "id": "mon_charred_nightmare", "fg": 1564, "rotates": false }, + { "id": "mon_chickenbot", "fg": 1595, "rotates": false }, + { "id": "mon_chicken", "fg": 1693, "rotates": false }, + { "id": "mon_chipmunk", "fg": 1694, "rotates": false }, + { "id": "mon_chud", "fg": 1684, "rotates": false }, + { "id": "mon_copbot", "fg": 1592, "rotates": false }, + { "id": "mon_cougar", "fg": 1621, "rotates": false }, + { "id": "mon_cow", "fg": 1540, "rotates": false }, + { "id": "mon_coyote", "fg": 1619, "rotates": false }, + { "id": "mon_coyote_wolf", "fg": 1619, "rotates": false }, + { "id": "mon_crawler", "fg": 1686, "rotates": false }, + { "id": "mon_creeper_hub", "fg": 1664, "rotates": false }, + { + "id": "mon_creeper_vine", + "fg": 1665, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1719 }, + { "id": "corner", "fg": 1715 }, + { "id": "edge", "fg": 1716 }, + { "id": "t_connection", "fg": 1717 }, + { "id": "end_piece", "fg": 1718 }, + { "id": "unconnected", "fg": 1665 } + ], + "rotates": false + }, + { "id": "mon_crow", "fg": 1622, "rotates": false }, + { "id": "mon_darkman", "fg": 1709, "rotates": false }, + { "id": "mon_dark_wyrm", "fg": 1720, "rotates": false }, + { "id": "mon_deer", "fg": 1616, "rotates": false }, + { "id": "mon_deer_mouse", "fg": 1567, "rotates": false }, + { "id": "mon_dementia", "fg": 1536, "rotates": false }, + { "id": "mon_dermatik", "fg": 1674, "rotates": false }, + { "id": "mon_dermatik_larva", "fg": 1675, "rotates": false }, + { "id": "mon_dog", "fg": 1623, "rotates": false }, + { "id": "mon_dog_skeleton", "fg": 1728, "rotates": false }, + { "id": "mon_dog_thing", "fg": 1623, "rotates": false }, + { "id": "mon_dog_zombie_cop", "fg": 1732, "rotates": false }, + { "id": "mon_dog_zombie_rot", "fg": 1731, "rotates": false }, + { "id": "mon_dragonfly", "fg": 1738, "rotates": false }, + { "id": "mon_dragonfly_giant", "fg": 1679, "rotates": false }, + { "id": "mon_duck", "fg": 1539, "rotates": false }, + { "id": "mon_exploder", "fg": 1657, "rotates": false }, + { "id": "mon_eyebot", "fg": 1581, "rotates": false }, + { "id": "mon_fish_bass", "fg": 1558, "rotates": false }, + { "id": "mon_fish_blinky", "fg": 1554, "rotates": false }, + { "id": "mon_fish_bluegill", "fg": 1558, "rotates": false }, + { "id": "mon_fish_bowfin", "fg": 1555, "rotates": false }, + { "id": "mon_fish_bullhead", "fg": 1556, "rotates": false }, + { "id": "mon_fish_carp", "fg": 1557, "rotates": false }, + { "id": "mon_fish_eel", "fg": 1553, "rotates": false }, + { "id": "mon_fish_lbass", "fg": 1556, "rotates": false }, + { "id": "mon_fish_pbass", "fg": 1577, "rotates": false }, + { "id": "mon_fish_perch", "fg": 1555, "rotates": false }, + { "id": "mon_fish_pickerel", "fg": 1577, "rotates": false }, + { "id": "mon_fish_pike", "fg": 1558, "rotates": false }, + { "id": "mon_fish_salmon", "fg": 1555, "rotates": false }, + { "id": "mon_fish_sbass", "fg": 1556, "rotates": false }, + { "id": "mon_fish_sunfish", "fg": 1555, "rotates": false }, + { "id": "mon_fish_trout", "fg": 1555, "rotates": false }, + { "id": "mon_fish_whitefish", "fg": 1577, "rotates": false }, + { "id": "mon_flaming_eye", "fg": 1703, "rotates": false }, + { "id": "mon_flesh_angel", "fg": 1597, "rotates": false }, + { "id": "mon_flying_polyp", "fg": 1705, "rotates": false }, + { "id": "mon_fly", "fg": 1630, "rotates": false }, + { "id": "mon_fox", "fg": 1569, "rotates": false }, + { "id": "mon_fox_gray", "fg": 1568, "rotates": false }, + { "id": "mon_fox_red", "fg": 1569, "rotates": false }, + { "id": "mon_frog", "fg": 1738, "rotates": false }, + { "id": "mon_frog_giant", "fg": 1677, "rotates": false }, + { "id": "mon_fungaloid", "fg": 1669, "rotates": false }, + { "id": "mon_fungaloid_dormant", "fg": 1669, "rotates": false }, + { "id": "mon_fungaloid_queen", "fg": 1672, "rotates": false }, + { "id": "mon_fungaloid_seeder", "fg": 1584, "rotates": false }, + { "id": "mon_fungaloid_tower", "fg": 1585, "rotates": false }, + { "id": "mon_fungaloid_young", "fg": 1670, "rotates": false }, + { "id": "mon_fungal_blossom", "fg": 1588, "rotates": false }, + { "id": "mon_fungal_fighter", "fg": 1724, "rotates": false }, + { "id": "mon_fungal_hedgerow", "fg": 1586, "rotates": false }, + { "id": "mon_fungal_tendril", "fg": 1587, "rotates": false }, + { "id": "mon_fungal_wall", "fg": 1673, "rotates": false }, + { "id": "mon_gelatin", "fg": 1708, "rotates": false }, + { "id": "mon_generator", "fg": 1658, "rotates": false }, + { "id": "mon_giant_crayfish", "fg": 1544, "rotates": false }, + { "id": "mon_gozu", "fg": 1704, "rotates": false }, + { "id": "mon_graboid", "fg": 1633, "rotates": false }, + { "id": "mon_gracke", "fg": 1710, "rotates": false }, + { "id": "mon_groundhog", "fg": 1691, "rotates": false }, + { "id": "mon_halfworm", "fg": 1635, "rotates": false }, + { "id": "mon_hallu_ant", "fg": 1626, "rotates": false }, + { "id": "mon_hallu_bee", "fg": 1631, "rotates": false }, + { "id": "mon_hallu_mom", "fg": 1659, "rotates": false }, + { "id": "mon_hallu_multicooker", "fg": 1565, "rotates": false }, + { "id": "mon_hallu_zom", "fg": 1636, "rotates": false }, + { "id": "mon_hare", "fg": 1700, "rotates": false }, + { "id": "mon_hazmatbot", "fg": 1591, "rotates": false }, + { "id": "mon_headless_dog_thing", "fg": 1721, "rotates": false }, + { "id": "mon_homunculus", "fg": 1537, "rotates": false }, + { "id": "mon_horse", "fg": 1541, "rotates": false }, + { "id": "mon_human_snail", "fg": 1550, "rotates": false }, + { "id": "mon_hunting_horror", "fg": 1714, "rotates": false }, + { "id": "mon_irradiated_wanderer_1", "fg": 1563, "rotates": false }, + { "id": "mon_irradiated_wanderer_2", "fg": 1563, "rotates": false }, + { "id": "mon_irradiated_wanderer_3", "fg": 1563, "rotates": false }, + { "id": "mon_irradiated_wanderer_4", "fg": 1563, "rotates": false }, + { "id": "mon_jabberwock", "fg": 1660, "rotates": false }, + { "id": "mon_kreck", "fg": 1559, "rotates": false }, + { "id": "mon_laserturret", "fg": 1548, "rotates": false }, + { "id": "mon_lemming", "fg": 1692, "rotates": false }, + { "id": "mon_manhack", "fg": 1582, "rotates": false }, + { "id": "mon_mink", "fg": 1682, "rotates": false }, + { "id": "mon_mi_go", "fg": 1552, "rotates": false }, + { "id": "mon_molebot", "fg": 1593, "rotates": false }, + { "id": "mon_moose", "fg": 1617, "rotates": false }, + { "id": "mon_mosquito", "fg": 1737, "rotates": false }, + { "id": "mon_mosquito_giant", "fg": 1680, "rotates": false }, + { "id": "mon_muskrat", "fg": 1694, "rotates": false }, + { "id": "mon_mutant_carp", "fg": 1578, "rotates": false }, + { "id": "mon_mutant_salmon", "fg": 1578, "rotates": false }, + { "id": "mon_one_eye", "fg": 1685, "rotates": false }, + { "id": "mon_opossum", "fg": 1695, "rotates": false }, + { "id": "mon_otter", "fg": 1701, "rotates": false }, + { "id": "mon_pig", "fg": 1542, "rotates": false }, + { "id": "mon_player_blob", "fg": 1562, "rotates": false }, + { "id": "mon_rabbit", "fg": 1615, "rotates": false }, + { "id": "mon_raccoon", "fg": 1695, "rotates": false }, + { "id": "mon_rattlesnake", "fg": 1723, "rotates": false }, + { "id": "mon_rat_king", "fg": 1681, "rotates": false }, + { "id": "mon_riotbot", "fg": 1592, "rotates": false }, + { "id": "mon_secubot", "fg": 1590, "rotates": false }, + { "id": "mon_sewer_fish", "fg": 1687, "rotates": false }, + { "id": "mon_sewer_rat", "fg": 1682, "rotates": false }, + { "id": "mon_sewer_snake", "fg": 1683, "rotates": false }, + { "id": "mon_shadow", "fg": 1709, "rotates": false }, + { "id": "mon_shadow_snake", "fg": 1706, "rotates": false }, + { "id": "mon_sheep", "fg": 1543, "rotates": false }, + { "id": "mon_shia", "fg": 1545, "rotates": false }, + { "id": "mon_shoggoth", "fg": 1546, "rotates": false }, + { "id": "mon_shrew", "fg": 1567, "rotates": false }, + { "id": "mon_skeleton", "fg": 1649, "rotates": false }, + { "id": "mon_skitterbot", "fg": 1583, "rotates": false }, + { "id": "mon_sludge_crawler", "fg": 1736, "rotates": false }, + { "id": "mon_slug", "fg": 1737, "rotates": false }, + { "id": "mon_slug_giant", "fg": 1676, "rotates": false }, + { "id": "mon_spider_jumping", "fg": 1598, "rotates": false }, + { "id": "mon_spider_jumping_giant", "fg": 1570, "rotates": false }, + { "id": "mon_spider_trapdoor", "fg": 1600, "rotates": false }, + { "id": "mon_spider_trapdoor_giant", "fg": 1576, "rotates": false }, + { "id": "mon_spider_web", "fg": 1579, "rotates": false }, + { "id": "mon_spider_web_s", "fg": 1601, "rotates": false }, + { "id": "mon_spider_widow", "fg": 1599, "rotates": false }, + { "id": "mon_spider_widow_giant", "fg": 1574, "rotates": false }, + { "id": "mon_spider_widow_giant_s", "fg": 1599, "rotates": false }, + { "id": "mon_spider_wolf", "fg": 1602, "rotates": false }, + { "id": "mon_spider_wolf_giant", "fg": 1580, "rotates": false }, + { "id": "mon_spore", "fg": 1671, "rotates": false }, + { "id": "mon_squirrel", "fg": 1690, "rotates": false }, + { "id": "mon_squirrel_red", "fg": 1691, "rotates": false }, + { "id": "mon_tankbot", "fg": 1596, "rotates": false }, + { "id": "mon_thing", "fg": 1722, "rotates": false }, + { "id": "mon_triffid", "fg": 1661, "rotates": false }, + { "id": "mon_triffid_heart", "fg": 1668, "rotates": false }, + { "id": "mon_triffid_queen", "fg": 1663, "rotates": false }, + { "id": "mon_triffid_young", "fg": 1662, "rotates": false }, + { "id": "mon_tripod", "fg": 1594, "rotates": false }, + { "id": "mon_turkey", "fg": 1735, "rotates": false }, + { "id": "mon_turret", "fg": 1657, "rotates": false }, + { "id": "mon_turret_bmg", "fg": 1561, "rotates": false }, + { "id": "mon_turret_rifle", "fg": 1561, "rotates": false }, + { "id": "mon_turret_searchlight", "fg": 1589, "rotates": false }, + { "id": "mon_twisted_body", "fg": 1551, "rotates": false }, + { "id": "mon_vinebeast", "fg": 1667, "rotates": false }, + { "id": "mon_vortex", "fg": 1547, "rotates": false }, + { "id": "mon_wasp", "fg": 1632, "rotates": false }, + { "id": "mon_weasel", "fg": 1682, "rotates": false }, + { "id": "mon_wolf", "fg": 1618, "rotates": false }, + { "id": "mon_worm", "fg": 1634, "rotates": false }, + { "id": "mon_yugg", "fg": 1707, "rotates": false }, + { "id": "mon_zhark", "fg": 1578, "rotates": false }, + { "id": "mon_zolf", "fg": 1740, "rotates": false }, + { "id": "mon_zombear", "fg": 1566, "rotates": false }, + { "id": "mon_zombie", "fg": 1636, "rotates": false }, + { "id": "mon_zombie_acidic", "fg": 1606, "rotates": false }, + { "id": "mon_zombie_armored", "fg": 1607, "rotates": false }, + { "id": "mon_zombie_bio_op", "fg": 1698, "rotates": false }, + { "id": "mon_zombie_brute", "fg": 1644, "rotates": false }, + { "id": "mon_zombie_brute_shocker", "fg": 1572, "rotates": false }, + { "id": "mon_zombie_child", "fg": 1656, "rotates": false }, + { "id": "mon_zombie_cop", "fg": 1637, "rotates": false }, + { "id": "mon_zombie_corrosive", "fg": 1605, "rotates": false }, + { "id": "mon_zombie_crawler", "fg": 1727, "rotates": false }, + { "id": "mon_zombie_dancer", "fg": 1575, "rotates": false }, + { "id": "mon_zombie_dog", "fg": 1643, "rotates": false }, + { "id": "mon_zombie_electric", "fg": 1640, "rotates": false }, + { "id": "mon_zombie_fast", "fg": 1643, "rotates": false }, + { "id": "mon_zombie_fat", "fg": 1725, "rotates": false }, + { "id": "mon_zombie_fireman", "fg": 1733, "rotates": false }, + { "id": "mon_zombie_fungus", "fg": 1646, "rotates": false }, + { "id": "mon_zombie_gasbag", "fg": 1697, "rotates": false }, + { "id": "mon_zombie_grabber", "fg": 1653, "rotates": false }, + { "id": "mon_zombie_grappler", "fg": 1603, "rotates": false }, + { "id": "mon_zombie_grenadier", "fg": 1608, "rotates": false }, + { "id": "mon_zombie_grenadier_elite", "fg": 1609, "rotates": false }, + { "id": "mon_zombie_hazmat", "fg": 1729, "rotates": false }, + { "id": "mon_zombie_hollow", "fg": 1610, "rotates": false }, + { "id": "mon_zombie_hulk", "fg": 1645, "rotates": false }, + { "id": "mon_zombie_hunter", "fg": 1702, "rotates": false }, + { "id": "mon_zombie_jackson", "fg": 1545, "rotates": false }, + { "id": "mon_zombie_master", "fg": 1654, "rotates": false }, + { "id": "mon_zombie_necro", "fg": 1650, "rotates": false }, + { "id": "mon_zombie_pig", "fg": 1573, "rotates": false }, + { "id": "mon_zombie_predator", "fg": 1611, "rotates": false }, + { "id": "mon_zombie_rot", "fg": 1730, "rotates": false }, + { "id": "mon_zombie_runner", "fg": 1612, "rotates": false }, + { "id": "mon_zombie_scientist", "fg": 1651, "rotates": false }, + { "id": "mon_zombie_shady", "fg": 1613, "rotates": false }, + { "id": "mon_zombie_shrieker", "fg": 1638, "rotates": false }, + { "id": "mon_zombie_smoker", "fg": 1641, "rotates": false }, + { "id": "mon_zombie_soldier", "fg": 1652, "rotates": false }, + { "id": "mon_zombie_spitter", "fg": 1639, "rotates": false }, + { "id": "mon_zombie_survivor", "fg": 1734, "rotates": false }, + { "id": "mon_zombie_swimmer", "fg": 1642, "rotates": false }, + { "id": "mon_zombie_technician", "fg": 1571, "rotates": false }, + { "id": "mon_zombie_tough", "fg": 1726, "rotates": false }, + { "id": "mon_zoose", "fg": 1739, "rotates": false }, + { "id": "mon_zougar", "fg": 1741, "rotates": false }, + { "id": "mon_zombie_biter", "fg": 1742, "rotates": false }, + { "id": "mon_zombie_brainless", "fg": 1743, "rotates": false }, + { "id": "mon_zombie_brute_ninja", "fg": 1744, "rotates": false }, + { "id": "mon_zombie_ears", "fg": 1745, "rotates": false }, + { "id": "mon_zombie_mancroc", "fg": 1746, "rotates": false }, + { "id": "mon_zombie_screecher", "fg": 1747, "rotates": false }, + { "id": "sandwich_t", "fg": 1750, "rotates": false, "multitile": false }, + { "id": "t_ash", "bg": 1976, "rotates": false }, + { "id": "t_atm", "fg": 2059, "rotates": false }, + { "id": "t_backboard", "fg": 1981, "rotates": false }, + { "id": "t_barndoor", "fg": 2082, "rotates": false }, + { + "id": "t_brick_wall", + "fg": 1877, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1875 }, + { "id": "corner", "fg": 1876 }, + { "id": "edge", "fg": 1877 }, + { "id": "t_connection", "fg": 1878 }, + { "id": "end_piece", "fg": 1877 }, + { "id": "unconnected", "fg": 1877 } + ], + "rotates": false + }, + { "id": "t_brick_wall_halfway", "fg": 1879, "rotates": false }, + { + "id": "t_brick_wall_line", + "fg": 1877, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1875 }, + { "id": "corner", "fg": 1876 }, + { "id": "edge", "fg": 1877 }, + { "id": "t_connection", "fg": 1878 }, + { "id": "end_piece", "fg": 1877 }, + { "id": "unconnected", "fg": 1877 } + ], + "rotates": false + }, + { "id": "t_bridge", "bg": 1941, "rotates": false }, + { "id": "t_card_military", "fg": 1983, "rotates": false }, + { "id": "t_card_reader_broken", "fg": 2083, "rotates": false }, + { "id": "t_card_science", "fg": 1983, "rotates": false }, + { "id": "t_carpet_green", "bg": 1948, "rotates": false }, + { "id": "t_carpet_purple", "bg": 1775, "rotates": false }, + { "id": "t_carpet_red", "bg": 1947, "rotates": false }, + { "id": "t_carpet_yellow", "bg": 1774, "rotates": false }, + { "id": "t_centrifuge", "fg": 1934, "rotates": false }, + { + "id": "t_chainfence_h", + "fg": 2089, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2011 }, + { "id": "corner", "fg": 1971 }, + { "id": "edge", "fg": 2089 }, + { "id": "t_connection", "fg": 1982 }, + { "id": "end_piece", "fg": 2017 }, + { "id": "unconnected", "fg": 2089 } + ], + "rotates": false + }, + { "id": "t_chainfence_posts", "fg": 1980, "bg": 1924, "rotates": false }, + { + "id": "t_chainfence_v", + "fg": 2089, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2011 }, + { "id": "corner", "fg": 1971 }, + { "id": "edge", "fg": 2089 }, + { "id": "t_connection", "fg": 1982 }, + { "id": "end_piece", "fg": 2017 }, + { "id": "unconnected", "fg": 2089 } + ], + "rotates": false + }, + { "id": "t_chaingate_c", "fg": 2090, "bg": 1924, "rotates": false }, + { "id": "t_chaingate_l", "fg": 2090, "bg": 1924, "rotates": false }, + { "id": "t_chaingate_o", "fg": 1760, "bg": 1924, "rotates": false }, + { "id": "t_claymound", "bg": 1824, "rotates": false }, + { "id": "t_column", "fg": 2002, "rotates": false }, + { + "id": "t_concrete_h", + "fg": 1970, + "bg": 1924, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1970 }, + { "id": "corner", "fg": 1968 }, + { "id": "edge", "fg": 1970 }, + { "id": "t_connection", "fg": 1969 }, + { "id": "end_piece", "fg": 1970 }, + { "id": "unconnected", "fg": 1970 } + ], + "rotates": false + }, + { "id": [ "t_concrete", "t_concrete_floor" ], "bg": 1752, "rotates": false }, + { + "id": "t_concrete_v", + "fg": 1970, + "bg": 1924, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1970 }, + { "id": "corner", "fg": 1968 }, + { "id": "edge", "fg": 1970 }, + { "id": "t_connection", "fg": 1969 }, + { "id": "end_piece", "fg": 1970 }, + { "id": "unconnected", "fg": 1970 } + ], + "rotates": false + }, + { + "id": [ "t_concrete_wall", "t_rock_smooth" ], + "fg": 1970, + "bg": 1924, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1970 }, + { "id": "corner", "fg": 1968 }, + { "id": "edge", "fg": 1970 }, + { "id": "t_connection", "fg": 1969 }, + { "id": "end_piece", "fg": 1970 }, + { "id": "unconnected", "fg": 1970 } + ], + "rotates": false + }, + { "id": "t_console", "fg": 1813, "bg": 2058, "rotates": false }, + { "id": "t_console_broken", "fg": 1814, "bg": 2058, "rotates": false }, + { "id": "t_conveyor", "fg": 1884, "bg": 2058, "rotates": false }, + { "id": "t_covered_well", "fg": 1823, "rotates": false }, + { "id": "t_current_trans", "fg": 1837, "rotates": false, "multitile": false }, + { "id": "t_curtains", "fg": 2075, "rotates": false }, + { + "id": "t_cvdbody", + "fg": 1784, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1857 }, + { "id": "corner", "fg": 1858 }, + { "id": "edge", "fg": 1859 }, + { "id": "t_connection", "fg": 1860 }, + { "id": "end_piece", "fg": 1861 }, + { "id": "unconnected", "fg": 1784 } + ], + "rotates": false + }, + { "id": "t_cvdmachine", "fg": 1785, "rotates": false }, + { "id": "t_diesel_pump", "fg": 1862, "rotates": false }, + { "id": "t_diesel_pump_smashed", "fg": 1863, "rotates": false }, + { "id": "t_dirtfloor", "bg": 1924, "rotates": false }, + { "id": "t_dirtmound", "bg": 1824, "rotates": false }, + { "id": "t_dirt", "bg": 1924, "rotates": false }, + { "id": "t_dock", "fg": 2003, "rotates": false }, + { "id": "t_door_bar_c", "fg": 2007, "rotates": false }, + { "id": "t_door_bar_locked", "fg": 2009, "rotates": false }, + { "id": "t_door_bar_o", "fg": 2008, "rotates": false }, + { "id": "t_door_boarded", "fg": 2067, "rotates": false }, + { "id": "t_door_boarded_damaged", "fg": 2066, "rotates": false }, + { "id": "t_door_boarded_damaged_peep", "fg": 2066, "rotates": false }, + { "id": "t_door_boarded_peep", "fg": 2067, "rotates": false }, + { "id": "t_door_b", "fg": 2063, "bg": 2058, "rotates": false }, + { "id": "t_door_b_peep", "fg": 2063, "bg": 2058, "rotates": false }, + { "id": "t_door_curtain_c", "fg": 1893, "bg": 2058, "rotates": false }, + { "id": "t_door_curtain_o", "fg": 1894, "bg": 2062, "rotates": false }, + { "id": "t_door_c", "fg": 2061, "bg": 2058, "rotates": false }, + { "id": "t_door_c_peep", "fg": 1849, "bg": 2058, "rotates": false }, + { "id": "t_door_frame", "fg": 2062, "rotates": false }, + { "id": "t_door_glass_c", "fg": 1754, "bg": 2058, "rotates": true }, + { "id": "t_door_glass_o", "fg": 1755, "bg": 2058, "rotates": true }, + { "id": "t_door_locked", "fg": 2064, "bg": 2058, "rotates": false }, + { "id": "t_door_locked_alarm", "fg": 2064, "bg": 2058, "rotates": false }, + { "id": "t_door_locked_interior", "fg": 2064, "bg": 2058, "rotates": false }, + { "id": "t_door_locked_peep", "fg": 1850, "bg": 2058, "rotates": false }, + { "id": "t_door_makeshift_c", "fg": 1892, "bg": 2058, "rotates": false }, + { "id": "t_door_makeshift_o", "fg": 2062, "bg": 2058, "rotates": false }, + { "id": "t_door_metal_c", "fg": 2068, "rotates": false }, + { "id": "t_door_metal_c_peep", "fg": 1896, "rotates": false }, + { "id": "t_door_metal_locked", "fg": 2010, "rotates": false }, + { "id": "t_door_metal_o", "fg": 2069, "rotates": false }, + { "id": "t_door_metal_o_peep", "fg": 2069, "rotates": false }, + { "id": "t_door_metal_pickable", "fg": 2010, "rotates": false }, + { "id": "t_door_o", "fg": 2062, "bg": 2058, "rotates": false }, + { "id": "t_door_o_peep", "fg": 2062, "bg": 2058, "rotates": false }, + { "id": "t_elevator", "fg": 1999, "rotates": false }, + { "id": "t_elevator_control", "fg": 2000, "rotates": false }, + { "id": "t_elevator_control_off", "fg": 2001, "rotates": false }, + { "id": "t_fault", "fg": 1788, "rotates": false }, + { "id": "t_fencegate_c", "fg": 1756, "bg": 1924, "rotates": false }, + { "id": "t_fencegate_o", "fg": 1757, "bg": 1924, "rotates": false }, + { + "id": "t_fence_barbed", + "fg": 1972, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2011 }, + { "id": "corner", "fg": 2012 }, + { "id": "edge", "fg": 1972 }, + { "id": "t_connection", "fg": 2013 }, + { "id": "end_piece", "fg": 2016 }, + { "id": "unconnected", "fg": 1972 } + ], + "rotates": false + }, + { "id": "t_fence_h", "fg": 2088, "bg": 1924, "rotates": false }, + { "id": "t_fence_post", "fg": 1973, "rotates": false }, + { + "id": "t_fence_rope", + "fg": 2046, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2044 }, + { "id": "corner", "fg": 2045 }, + { "id": "edge", "fg": 2046 }, + { "id": "t_connection", "fg": 2047 }, + { "id": "end_piece", "fg": 2048 }, + { "id": "unconnected", "fg": 2046 } + ], + "rotates": false + }, + { "id": "t_fence_v", "fg": 338, "bg": 1924, "rotates": false }, + { + "id": "t_fence_wire", + "fg": 2089, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2011 }, + { "id": "corner", "fg": 1971 }, + { "id": "edge", "fg": 2089 }, + { "id": "t_connection", "fg": 1982 }, + { "id": "end_piece", "fg": 2017 }, + { "id": "unconnected", "fg": 2089 } + ], + "rotates": false + }, + { "id": "t_flat_roof", "bg": 1752, "rotates": false }, + { "id": "t_floor", "bg": 2058, "rotates": false }, + { "id": "t_floor_blue", "bg": 1949, "rotates": false }, + { "id": "t_floor_green", "bg": 1948, "rotates": false }, + { "id": "t_floor_red", "bg": 1947, "rotates": false }, + { "id": "t_floor_waxed", "bg": 1773, "rotates": false }, + { "id": "t_floor_wax", "bg": 1786, "rotates": false }, + { "id": "t_fungus", "bg": 1749, "rotates": false }, + { "id": "t_fungus_floor_in", "bg": 1984, "rotates": false }, + { "id": "t_fungus_floor_out", "bg": 1986, "rotates": false }, + { "id": "t_fungus_floor_sup", "fg": 1985, "rotates": false }, + { "id": "t_fungus_mound", "fg": 1990, "rotates": false }, + { "id": "t_fungus_wall", "fg": 1987, "rotates": false }, + { "id": "t_fungus_wall_h", "fg": 1989, "rotates": false }, + { "id": "t_fungus_wall_v", "fg": 1988, "rotates": false }, + { "id": "t_gas_pump", "fg": 1942, "bg": 2004, "rotates": false }, + { "id": "t_gas_pump_a", "fg": 1865, "rotates": false }, + { "id": "t_gas_pump_smashed", "fg": 1943, "bg": 2004, "rotates": false }, + { "id": "t_gas_tank", "fg": 1864, "rotates": false }, + { "id": "t_gates_control_concrete", "fg": 1818, "rotates": false }, + { "id": "t_gates_mech_control", "fg": 1818, "rotates": false }, + { + "id": "t_generator_broken", + "fg": 1998, + "multitile": true, + "additional_tiles": [ { "id": "corner", "fg": 1998, "bg": [ ] }, { "id": "t_connection", "fg": 2057, "bg": [ ] } ], + "rotates": false + }, + { "id": "t_grass", "fg": 2049, "rotates": false }, + { "id": "t_grass_white", "fg": 1891, "bg": 1516, "rotates": false }, + { "id": "t_grate", "fg": 2093, "rotates": false }, + { "id": "t_guardrail_bg_dp", "fg": 1959, "rotates": true }, + { "id": "t_hole", "bg": [ ], "rotates": false }, + { "id": "t_improvised_shelter", "fg": 1839, "rotates": false, "multitile": false }, + { "id": "t_ind_drill", "fg": 1919, "rotates": false, "multitile": false }, + { "id": "t_ind_furnace", "fg": 1918, "rotates": false, "multitile": false }, + { "id": "t_ind_press", "fg": 1920, "rotates": false }, + { "id": "t_ladder_down", "fg": 1758, "rotates": false }, + { "id": "t_ladder_up", "fg": 2084, "rotates": false }, + { "id": "t_lava", "fg": 1978, "rotates": false }, + { "id": "t_lgtn_arrest", "fg": 1882, "rotates": false, "multitile": false }, + { "id": "t_linoleum_gray", "bg": 1809, "rotates": false }, + { "id": "t_linoleum_white", "bg": 1792, "rotates": false }, + { "id": "t_little_column", "fg": 2002, "rotates": false }, + { "id": "t_machinery_electronic", "fg": 1921, "rotates": false }, + { "id": "t_machinery_heavy", "fg": 1925, "rotates": false }, + { "id": "t_machinery_light", "fg": 1922, "rotates": false }, + { "id": "t_machinery_old", "fg": 1926, "rotates": false }, + { "id": "t_manhole", "fg": 1816, "rotates": false }, + { "id": "t_manhole_cover", "fg": 1815, "bg": 2004, "rotates": false }, + { "id": "t_marloss", "fg": 1748, "rotates": false }, + { "id": "t_marloss_tree", "fg": 1856, "rotates": false }, + { "id": "t_mdoor_frame", "fg": 2069, "rotates": false }, + { "id": "t_metal", "bg": 1931, "rotates": false }, + { "id": "t_metal_floor", "bg": 2060, "rotates": false }, + { + "id": "t_missile", + "fg": 1776, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1776 }, + { "id": "corner", "fg": 1777 }, + { "id": "edge", "fg": 1776 }, + { "id": "t_connection", "fg": 1778 }, + { "id": "end_piece", "fg": 1776 }, + { "id": "unconnected", "fg": 1776 } + ], + "rotates": false + }, + { "id": "t_missile_exploded", "fg": 1979, "rotates": false }, + { + "id": "t_monkey_bars", + "fg": 1950, + "bg": [ ], + "multitile": true, + "additional_tiles": [ { "id": "center", "fg": 1950 }, { "id": "corner", "fg": 1951 }, { "id": "t_connection", "fg": 1952 } ], + "rotates": false + }, + { "id": "t_m_frame", "fg": 1895, "rotates": false }, + { "id": "t_oil_circ_brkr_l", "fg": 1834, "rotates": false, "multitile": false }, + { "id": "t_oil_circ_brkr_s", "fg": 1835, "rotates": false, "multitile": false }, + { "id": "t_open_air", "bg": 1821, "rotates": false }, + { "id": "t_ov_reb_cage", "bg": 1931, "rotates": false }, + { "id": "t_ov_smreb_cage", "bg": 1931, "rotates": false }, + { "id": "t_palisade", "fg": 2081, "bg": 1924, "rotates": false }, + { "id": "t_palisade_gate", "fg": 1756, "bg": 1924, "rotates": false }, + { "id": "t_palisade_gate_o", "fg": 1757, "bg": 1924, "rotates": false }, + { "id": "t_palisade_pulley", "fg": 2082, "rotates": false }, + { "id": "t_paper", "fg": 2092, "rotates": false }, + { "id": "t_pavement", "bg": 2004, "rotates": false }, + { "id": "t_pavement_bg_dp", "bg": 2004, "rotates": false }, + { "id": "t_pavement_y", "fg": 1928, "bg": 2004, "rotates": false }, + { "id": "t_pavement_y_bg_dp", "fg": 1928, "bg": 2004, "rotates": false }, + { "id": "t_pedestal_temple", "fg": 2097, "rotates": false }, + { "id": "t_pedestal_wyrm", "fg": 2096, "rotates": false }, + { + "id": "t_pit", + "fg": 1880, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2022 }, + { "id": "corner", "fg": 2023 }, + { "id": "edge", "fg": 2024 }, + { "id": "t_connection", "fg": 2025 }, + { "id": "end_piece", "fg": 2026 }, + { "id": "unconnected", "fg": 1880 } + ], + "rotates": false + }, + { + "id": "t_pit_corpsed", + "fg": 2033, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2028 }, + { "id": "corner", "fg": 2029 }, + { "id": "edge", "fg": 2030 }, + { "id": "t_connection", "fg": 2031 }, + { "id": "end_piece", "fg": 2032 }, + { "id": "unconnected", "fg": 2033 } + ], + "rotates": false + }, + { "id": "t_pit_covered", "bg": 1927, "rotates": false }, + { + "id": "t_pit_glass", + "fg": 1848, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1843 }, + { "id": "corner", "fg": 1844 }, + { "id": "edge", "fg": 1845 }, + { "id": "t_connection", "fg": 1846 }, + { "id": "end_piece", "fg": 1847 }, + { "id": "unconnected", "fg": 1848 } + ], + "rotates": false + }, + { "id": "t_pit_glass_covered", "bg": 1927, "rotates": false }, + { + "id": "t_pit_shallow", + "fg": 1842, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2039 }, + { "id": "corner", "fg": 2040 }, + { "id": "edge", "fg": 2041 }, + { "id": "t_connection", "fg": 2042 }, + { "id": "end_piece", "fg": 2043 }, + { "id": "unconnected", "fg": 1842 } + ], + "rotates": false + }, + { + "id": "t_pit_spiked", + "fg": 1923, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2034 }, + { "id": "corner", "fg": 2035 }, + { "id": "edge", "fg": 2036 }, + { "id": "t_connection", "fg": 2037 }, + { "id": "end_piece", "fg": 2038 }, + { "id": "unconnected", "fg": 1923 } + ], + "rotates": false + }, + { "id": "t_pit_spiked_covered", "bg": 1927, "rotates": false }, + { "id": "t_plut_generator", "fg": 1838, "rotates": false, "multitile": false }, + { "id": "t_pontoon_dp", "fg": 2027, "rotates": true }, + { "id": "t_portcullis", "fg": 1789, "rotates": false }, + { "id": "t_potential_trans", "fg": 1835, "rotates": false, "multitile": false }, + { "id": "t_radio_controls", "fg": 1819, "rotates": false }, + { "id": "t_radio_tower", "fg": 1817, "bg": 2004, "rotates": false }, + { "id": "t_railing_h", "fg": 1960, "rotates": false }, + { "id": "t_railing_v", "fg": 1959, "rotates": false }, + { "id": "t_rdoor_boarded", "fg": 1841, "rotates": false }, + { "id": "t_rdoor_boarded_damaged", "fg": 1840, "rotates": false }, + { "id": "t_rdoor_b", "fg": 1769, "rotates": false }, + { "id": "t_rdoor_c", "fg": 1767, "rotates": false }, + { "id": "t_rdoor_o", "fg": 1768, "rotates": false }, + { + "id": "t_reb_cage", + "fg": 2087, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2014 }, + { "id": "corner", "fg": 2006 }, + { "id": "edge", "fg": 2005 }, + { "id": "t_connection", "fg": 2015 }, + { "id": "end_piece", "fg": 2005 }, + { "id": "unconnected", "fg": 2087 } + ], + "rotates": false + }, + { "id": "t_recycler", "fg": 1812, "rotates": false }, + { + "id": "t_reinforced_glass_h", + "fg": 1967, + "bg": 2058, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1967 }, + { "id": "corner", "fg": 1965 }, + { "id": "edge", "fg": 1967 }, + { "id": "t_connection", "fg": 1966 }, + { "id": "end_piece", "fg": 1967 }, + { "id": "unconnected", "fg": 1967 } + ], + "rotates": false + }, + { + "id": "t_reinforced_glass_shutter", + "fg": 1911, + "bg": 1924, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1910 }, + { "id": "corner", "fg": 1909 }, + { "id": "edge", "fg": 1911 }, + { "id": "t_connection", "fg": 1910 }, + { "id": "end_piece", "fg": 1911 }, + { "id": "unconnected", "fg": 1911 } + ], + "rotates": false + }, + { + "id": [ "t_reinforced_glass", "t_reinforced_glass_shutter_open" ], + "fg": 1967, + "bg": 2058, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1967 }, + { "id": "corner", "fg": 1965 }, + { "id": "edge", "fg": 1967 }, + { "id": "t_connection", "fg": 1966 }, + { "id": "end_piece", "fg": 1967 }, + { "id": "unconnected", "fg": 1967 } + ], + "rotates": false + }, + { + "id": "t_reinforced_glass_v", + "fg": 1967, + "bg": 2058, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1967 }, + { "id": "corner", "fg": 1965 }, + { "id": "edge", "fg": 1967 }, + { "id": "t_connection", "fg": 1966 }, + { "id": "end_piece", "fg": 1967 }, + { "id": "unconnected", "fg": 1967 } + ], + "rotates": false + }, + { "id": "t_rock", "fg": 1810, "rotates": false }, + { "id": "t_rock_blue", "fg": 1946, "rotates": false }, + { "id": "t_rock_floor", "bg": 1930, "rotates": false }, + { "id": "t_rock_green", "fg": 1945, "rotates": false }, + { "id": "t_rock_red", "fg": 1944, "rotates": false }, + { + "id": "t_rock_wall", + "fg": 1929, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2054 }, + { "id": "corner", "fg": 2055 }, + { "id": "edge", "fg": 1929 }, + { "id": "t_connection", "fg": 2056 }, + { "id": "end_piece", "fg": 1929 }, + { "id": "unconnected", "fg": 1929 } + ], + "rotates": false + }, + { "id": "t_rock_wall_half", "fg": 1811, "rotates": false }, + { + "id": "t_root_wall", + "fg": 2046, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2050 }, + { "id": "corner", "fg": 2051 }, + { "id": "edge", "fg": 2046 }, + { "id": "t_connection", "fg": 2052 }, + { "id": "end_piece", "fg": 2053 }, + { "id": "unconnected", "fg": 2046 } + ], + "rotates": false + }, + { "id": "t_rope_up", "fg": 1790, "rotates": false }, + { "id": "t_rubble", "bg": 1940, "rotates": false }, + { "id": "t_sai_box", "fg": 329, "rotates": false }, + { "id": "t_sai_box_damaged", "fg": 330, "rotates": false }, + { + "id": "t_sandbox", + "fg": 1833, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1829 }, + { "id": "corner", "fg": 1932 }, + { "id": "edge", "fg": 1830 }, + { "id": "t_connection", "fg": 1831 }, + { "id": "end_piece", "fg": 1832 }, + { "id": "unconnected", "fg": 1833 } + ], + "rotates": false + }, + { "id": "t_sandmound", "bg": 1824, "rotates": false }, + { "id": "t_sand", "bg": 1935, "rotates": false }, + { + "id": "t_sconc_wall", + "fg": 1929, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2054 }, + { "id": "corner", "fg": 2055 }, + { "id": "edge", "fg": 1929 }, + { "id": "t_connection", "fg": 2056 }, + { "id": "end_piece", "fg": 1929 }, + { "id": "unconnected", "fg": 1929 } + ], + "rotates": false + }, + { "id": "t_sconc_wall_halfway", "fg": 1811, "rotates": false }, + { "id": "t_scrap_floor", "bg": 2060, "rotates": false }, + { + "id": "t_scrap_wall", + "fg": 1964, + "bg": 1924, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1964 }, + { "id": "corner", "fg": 1962 }, + { "id": "edge", "fg": 1964 }, + { "id": "t_connection", "fg": 1963 }, + { "id": "end_piece", "fg": 1964 }, + { "id": "unconnected", "fg": 1964 } + ], + "rotates": false + }, + { "id": "t_searth_test", "bg": 1791, "rotates": false }, + { "id": "t_sewage", "bg": 2094, "rotates": false }, + { + "id": [ "t_sewage_pipe", "t_ind_pipe" ], + "fg": 1939, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1993 }, + { "id": "corner", "fg": 1994 }, + { "id": "edge", "fg": 1995 }, + { "id": "t_connection", "fg": 1996 }, + { "id": "end_piece", "fg": 1997 }, + { "id": "unconnected", "fg": 1939 } + ], + "rotates": false + }, + { "id": "t_sewage_pump", "fg": 1938, "rotates": false }, + { "id": "t_shrub", "fg": 2086, "bg": 1924, "rotates": false }, + { "id": "t_shrub_blueberry", "fg": 2065, "bg": 1935, "rotates": false }, + { "id": "t_shrub_blueberry_harvested", "fg": 1883, "bg": 1935, "rotates": false }, + { "id": "t_shrub_blueberry_harvested", "fg": 1851, "bg": 1935, "rotates": false }, + { "id": "t_shrub_fungal", "fg": 1991, "rotates": false }, + { "id": "t_shrub_strawberry", "fg": 2076, "bg": 1935, "rotates": false }, + { "id": "t_shrub_strawberry_harvested", "fg": 1883, "bg": 1935, "rotates": false }, + { "id": "t_shrub_strawberry_harvested", "fg": 1852, "bg": 1935, "rotates": false }, + { "id": "t_sidewalk", "bg": 1961, "rotates": false }, + { "id": "t_sidewalk_bg_dp", "bg": 1961, "rotates": false }, + { "id": "t_skylight", "bg": 1792, "rotates": false }, + { + "id": "t_slide", + "fg": 1954, + "bg": [ ], + "multitile": true, + "additional_tiles": [ { "id": "edge", "fg": 1954 }, { "id": "end_piece", "fg": 1953 } ], + "rotates": false + }, + { "id": "t_slime", "fg": 2094, "rotates": false }, + { "id": "t_slope_down", "fg": 2099, "rotates": false }, + { "id": "t_slope_up", "fg": 2095, "rotates": false }, + { "id": "t_slot_machine", "fg": 1793, "rotates": false }, + { "id": "t_stairs_down", "fg": 1763, "rotates": false }, + { "id": "t_stairs_up", "fg": 1762, "rotates": false }, + { "id": "t_station_disc", "fg": 1836, "rotates": false, "multitile": false }, + { + "id": [ "t_stone_wall_line", "t_rock_wall" ], + "fg": 1964, + "bg": 1924, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1908 }, + { "id": "corner", "fg": 1904 }, + { "id": "edge", "fg": 1906 }, + { "id": "t_connection", "fg": 1905 }, + { "id": "end_piece", "fg": 1907 }, + { "id": "unconnected", "fg": 1903 } + ], + "rotates": false + }, + { "id": "t_strconc_floor", "bg": 1752, "rotates": false }, + { "id": "t_strconc_floor_halfway", "fg": 1809, "rotates": false }, + { + "id": "t_strconc_wall", + "fg": 1929, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2054 }, + { "id": "corner", "fg": 2055 }, + { "id": "edge", "fg": 1929 }, + { "id": "t_connection", "fg": 2056 }, + { "id": "end_piece", "fg": 1929 }, + { "id": "unconnected", "fg": 1929 } + ], + "rotates": false + }, + { "id": "t_strconc_wall_halfway", "fg": 1811, "rotates": false }, + { "id": "t_support_l", "fg": 2002, "rotates": false }, + { "id": "t_support_s", "fg": 1980, "bg": 1924, "rotates": false }, + { "id": "t_swater_dp", "fg": 1958, "rotates": false }, + { "id": "t_swater_sh", "fg": 1957, "rotates": false }, + { "id": "t_switchgear_l", "fg": 1881, "rotates": false }, + { "id": "t_switchgear_s", "fg": 1881, "rotates": false }, + { "id": "t_switch_even", "fg": 1766, "rotates": false }, + { "id": "t_switch_gb", "fg": 1764, "rotates": false }, + { "id": "t_switch_rb", "fg": 1765, "rotates": false }, + { "id": "t_switch_rg", "fg": 2098, "rotates": false }, + { "id": "t_thconc_floor", "bg": 1752, "rotates": false }, + { "id": "t_tree", "fg": 1759, "bg": 1924, "rotates": false }, + { "id": "t_tree_apple", "fg": 1825, "bg": 1924, "rotates": false }, + { "id": "t_tree_apple_harvested", "fg": 1853, "bg": 1924, "rotates": false }, + { "id": "t_tree_apple_season_spring", "fg": 1855, "bg": 1924, "rotates": false }, + { "id": "t_tree_apple_season_summer", "fg": 1853, "bg": 1924, "rotates": false }, + { "id": "t_tree_apple_season_winter", "fg": 1870, "bg": 1924, "rotates": false }, + { "id": "t_tree_apricot", "fg": 1826, "bg": 1924, "rotates": false }, + { "id": "t_tree_apricot_harvested", "fg": 1854, "bg": 1924, "rotates": false }, + { "id": "t_tree_apricot_season_autumn", "fg": 1869, "bg": 1924, "rotates": false }, + { "id": "t_tree_apricot_season_spring", "fg": 1855, "bg": 1924, "rotates": false }, + { "id": "t_tree_apricot_season_winter", "fg": 1870, "bg": 1924, "rotates": false }, + { "id": "t_tree_birch", "fg": 1913, "rotates": false, "multitile": false }, + { "id": "t_tree_birch_harvested", "fg": 1913, "rotates": false, "multitile": false }, + { "id": "t_tree_blackjack", "fg": 1866, "bg": 1924, "rotates": false }, + { "id": "t_tree_blackjack_season_autumn", "fg": 1867, "bg": 1924, "rotates": false }, + { "id": "t_tree_blackjack_season_spring", "fg": 1874, "bg": 1924, "rotates": false }, + { "id": "t_tree_blackjack_season_winter", "fg": 1868, "bg": 1924, "rotates": false }, + { "id": "t_tree_cherry", "fg": 1770, "bg": 1924, "rotates": false }, + { "id": "t_tree_cherry_harvested", "fg": 1855, "bg": 1924, "rotates": false }, + { "id": "t_tree_cherry_season_autumn", "fg": 1869, "bg": 1924, "rotates": false }, + { "id": "t_tree_cherry_season_spring", "fg": 1855, "bg": 1924, "rotates": false }, + { "id": "t_tree_cherry_season_winter", "fg": 1870, "bg": 1924, "rotates": false }, + { "id": "t_tree_deadpine", "fg": 1828, "bg": 1924, "rotates": false }, + { "id": "t_tree_dead", "fg": 1912, "rotates": false, "multitile": false }, + { "id": "t_tree_fungal", "fg": 1751, "rotates": false }, + { "id": "t_tree_fungal_young", "fg": 1992, "rotates": false }, + { "id": "t_tree_hickory", "fg": 1915, "rotates": false, "multitile": false }, + { "id": "t_tree_hickory_dead", "fg": 1917, "rotates": false, "multitile": false }, + { "id": "t_tree_hickory_harvested", "fg": 1915, "rotates": false, "multitile": false }, + { "id": "t_tree_maple", "fg": 1916, "rotates": false, "multitile": false }, + { "id": "t_tree_maple_tapped", "fg": 1916, "rotates": false, "multitile": false }, + { "id": "t_tree_peach", "fg": 1826, "bg": 1924, "rotates": false }, + { "id": "t_tree_peach_harvested", "fg": 1854, "bg": 1924, "rotates": false }, + { "id": "t_tree_peach_season_autumn", "fg": 1869, "bg": 1924, "rotates": false }, + { "id": "t_tree_peach_season_spring", "fg": 1855, "bg": 1924, "rotates": false }, + { "id": "t_tree_peach_season_winter", "fg": 1870, "bg": 1924, "rotates": false }, + { "id": "t_tree_pear", "fg": 1825, "bg": 1924, "rotates": false }, + { "id": "t_tree_pear_harvested", "fg": 1853, "bg": 1924, "rotates": false }, + { "id": "t_tree_pear_season_spring", "fg": 1855, "bg": 1924, "rotates": false }, + { "id": "t_tree_pear_season_summer", "fg": 1853, "bg": 1924, "rotates": false }, + { "id": "t_tree_pear_season_winter", "fg": 1870, "bg": 1924, "rotates": false }, + { "id": "t_tree_pine", "fg": 1827, "bg": 1924, "rotates": false }, + { "id": "t_tree_plum", "fg": 1770, "bg": 1924, "rotates": false }, + { "id": "t_tree_plum_harvested", "fg": 1855, "bg": 1924, "rotates": false }, + { "id": "t_tree_plum_season_autumn", "fg": 1869, "bg": 1924, "rotates": false }, + { "id": "t_tree_plum_season_spring", "fg": 1855, "bg": 1924, "rotates": false }, + { "id": "t_tree_plum_season_winter", "fg": 1870, "bg": 1924, "rotates": false }, + { "id": "t_tree_season_autumn", "fg": 1869, "bg": 1924, "rotates": false }, + { "id": "t_tree_season_spring", "fg": 1853, "bg": 1924, "rotates": false }, + { "id": "t_tree_season_winter", "fg": 1870, "bg": 1924, "rotates": false }, + { "id": "t_tree_willow", "fg": 1914, "rotates": false, "multitile": false }, + { "id": "t_tree_willow_harvested", "fg": 1914, "rotates": false, "multitile": false }, + { "id": "t_tree_young", "fg": 2100, "bg": 1924, "rotates": false }, + { "id": "t_tree_young_season_autumn", "fg": 1872, "bg": 1924, "rotates": false }, + { "id": "t_tree_young_season_spring", "fg": 1871, "bg": 1924, "rotates": false }, + { "id": "t_tree_young_season_winter", "fg": 1873, "bg": 1924, "rotates": false }, + { "id": "t_trunk", "fg": 1936, "rotates": false }, + { "id": "t_underbrush", "fg": 1937, "bg": 1924, "rotates": false }, + { "id": "t_underbrush_harvested_autumn", "fg": 1883, "bg": 1924, "rotates": false }, + { "id": "t_underbrush_harvested_spring", "fg": 1883, "bg": 1924, "rotates": false }, + { "id": "t_underbrush_harvested_summer", "fg": 1883, "bg": 1924, "rotates": false }, + { "id": "t_underbrush_harvested_winter", "fg": 1883, "bg": 1924, "rotates": false }, + { "id": "t_utility_light", "bg": 1822, "rotates": false }, + { "id": "t_vat", "fg": 1933, "rotates": false }, + { + "id": "t_wall", + "fg": 2085, + "bg": 1935, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2085 }, + { "id": "corner", "fg": 1955 }, + { "id": "edge", "fg": 2085 }, + { "id": "t_connection", "fg": 1956 }, + { "id": "end_piece", "fg": 2085 }, + { "id": "unconnected", "fg": 2085 } + ], + "rotates": false + }, + { + "id": "t_wall_b", + "fg": 1797, + "bg": 1935, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1797 }, + { "id": "corner", "fg": 1798 }, + { "id": "edge", "fg": 1797 }, + { "id": "t_connection", "fg": 1799 }, + { "id": "end_piece", "fg": 1797 }, + { "id": "unconnected", "fg": 1797 } + ], + "rotates": false + }, + { + "id": "t_wall_glass", + "fg": 1974, + "bg": [ ], + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1974 }, + { "id": "corner", "fg": 1975 }, + { "id": "edge", "fg": 1974 }, + { "id": "t_connection", "fg": 1753 }, + { "id": "end_piece", "fg": 1974 }, + { "id": "unconnected", "fg": 1974 } + ], + "rotates": false + }, + { + "id": "t_wall_glass_alarm", + "fg": 1967, + "bg": 2058, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1967 }, + { "id": "corner", "fg": 1965 }, + { "id": "edge", "fg": 1967 }, + { "id": "t_connection", "fg": 1966 }, + { "id": "end_piece", "fg": 1967 }, + { "id": "unconnected", "fg": 1967 } + ], + "rotates": false + }, + { + "id": "t_wall_glass_h", + "fg": 1974, + "bg": [ ], + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1974 }, + { "id": "corner", "fg": 1975 }, + { "id": "edge", "fg": 1974 }, + { "id": "t_connection", "fg": 1753 }, + { "id": "end_piece", "fg": 1974 }, + { "id": "unconnected", "fg": 1974 } + ], + "rotates": false + }, + { + "id": "t_wall_glass_h_alarm", + "fg": 1967, + "bg": 2058, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1967 }, + { "id": "corner", "fg": 1965 }, + { "id": "edge", "fg": 1967 }, + { "id": "t_connection", "fg": 1966 }, + { "id": "end_piece", "fg": 1967 }, + { "id": "unconnected", "fg": 1967 } + ], + "rotates": false + }, + { + "id": "t_wall_glass_v", + "fg": 1974, + "bg": [ ], + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1974 }, + { "id": "corner", "fg": 1975 }, + { "id": "edge", "fg": 1974 }, + { "id": "t_connection", "fg": 1753 }, + { "id": "end_piece", "fg": 1974 }, + { "id": "unconnected", "fg": 1974 } + ], + "rotates": false + }, + { + "id": "t_wall_glass_v_alarm", + "fg": 1967, + "bg": 2058, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1967 }, + { "id": "corner", "fg": 1965 }, + { "id": "edge", "fg": 1967 }, + { "id": "t_connection", "fg": 1966 }, + { "id": "end_piece", "fg": 1967 }, + { "id": "unconnected", "fg": 1967 } + ], + "rotates": false + }, + { + "id": "t_wall_g", + "fg": 1800, + "bg": 1935, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1800 }, + { "id": "corner", "fg": 1801 }, + { "id": "edge", "fg": 1800 }, + { "id": "t_connection", "fg": 1802 }, + { "id": "end_piece", "fg": 1800 }, + { "id": "unconnected", "fg": 1800 } + ], + "rotates": false + }, + { "id": "t_wall_half", "fg": 2077, "rotates": false }, + { + "id": "t_wall_h", + "fg": 2085, + "bg": 1935, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2085 }, + { "id": "corner", "fg": 1955 }, + { "id": "edge", "fg": 2085 }, + { "id": "t_connection", "fg": 1956 }, + { "id": "end_piece", "fg": 2085 }, + { "id": "unconnected", "fg": 2085 } + ], + "rotates": false + }, + { + "id": "t_wall_h_b", + "fg": 1797, + "bg": 1935, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1797 }, + { "id": "corner", "fg": 1798 }, + { "id": "edge", "fg": 1797 }, + { "id": "t_connection", "fg": 1799 }, + { "id": "end_piece", "fg": 1797 }, + { "id": "unconnected", "fg": 1797 } + ], + "rotates": false + }, + { + "id": "t_wall_h_g", + "fg": 1800, + "bg": 1935, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1800 }, + { "id": "corner", "fg": 1801 }, + { "id": "edge", "fg": 1800 }, + { "id": "t_connection", "fg": 1802 }, + { "id": "end_piece", "fg": 1800 }, + { "id": "unconnected", "fg": 1800 } + ], + "rotates": false + }, + { + "id": "t_wall_h_p", + "fg": 1806, + "bg": 1935, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1806 }, + { "id": "corner", "fg": 1807 }, + { "id": "edge", "fg": 1806 }, + { "id": "t_connection", "fg": 1808 }, + { "id": "end_piece", "fg": 1806 }, + { "id": "unconnected", "fg": 1806 } + ], + "rotates": false + }, + { + "id": "t_wall_h_r", + "fg": 1794, + "bg": 1935, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1794 }, + { "id": "corner", "fg": 1795 }, + { "id": "edge", "fg": 1794 }, + { "id": "t_connection", "fg": 1796 }, + { "id": "end_piece", "fg": 1794 }, + { "id": "unconnected", "fg": 1794 } + ], + "rotates": false + }, + { + "id": "t_wall_h_w", + "fg": 2085, + "bg": 1935, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2085 }, + { "id": "corner", "fg": 1955 }, + { "id": "edge", "fg": 2085 }, + { "id": "t_connection", "fg": 1956 }, + { "id": "end_piece", "fg": 2085 }, + { "id": "unconnected", "fg": 2085 } + ], + "rotates": false + }, + { + "id": "t_wall_h_y", + "fg": 1803, + "bg": 1935, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1803 }, + { "id": "corner", "fg": 1804 }, + { "id": "edge", "fg": 1803 }, + { "id": "t_connection", "fg": 1805 }, + { "id": "end_piece", "fg": 1803 }, + { "id": "unconnected", "fg": 1803 } + ], + "rotates": false + }, + { + "id": "t_wall_log", + "fg": 2078, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1885 }, + { "id": "corner", "fg": 1886 }, + { "id": "edge", "fg": 1887 }, + { "id": "t_connection", "fg": 1888 }, + { "id": "end_piece", "fg": 1889 }, + { "id": "unconnected", "fg": 2078 } + ], + "rotates": false + }, + { "id": "t_wall_log_broken", "fg": 2080, "bg": 1924, "rotates": false }, + { "id": "t_wall_log_chipped", "fg": 2079, "bg": 1924, "rotates": false }, + { "id": "t_wall_log_half", "fg": 2077, "bg": 1924, "rotates": false }, + { + "id": "t_wall_metal", + "fg": 1964, + "bg": 1924, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1902 }, + { "id": "corner", "fg": 1898 }, + { "id": "edge", "fg": 1900 }, + { "id": "t_connection", "fg": 1899 }, + { "id": "end_piece", "fg": 1901 }, + { "id": "unconnected", "fg": 1897 } + ], + "rotates": false + }, + { + "id": "t_wall_metal_h", + "fg": 1964, + "bg": 1924, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1964 }, + { "id": "corner", "fg": 1962 }, + { "id": "edge", "fg": 1964 }, + { "id": "t_connection", "fg": 1963 }, + { "id": "end_piece", "fg": 1964 }, + { "id": "unconnected", "fg": 1964 } + ], + "rotates": false + }, + { + "id": "t_wall_metal_v", + "fg": 1964, + "bg": 1924, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1964 }, + { "id": "corner", "fg": 1962 }, + { "id": "edge", "fg": 1964 }, + { "id": "t_connection", "fg": 1963 }, + { "id": "end_piece", "fg": 1964 }, + { "id": "unconnected", "fg": 1964 } + ], + "rotates": false + }, + { + "id": "t_wall_p", + "fg": 1806, + "bg": 1935, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1806 }, + { "id": "corner", "fg": 1807 }, + { "id": "edge", "fg": 1806 }, + { "id": "t_connection", "fg": 1808 }, + { "id": "end_piece", "fg": 1806 }, + { "id": "unconnected", "fg": 1806 } + ], + "rotates": false + }, + { + "id": "t_wall_r", + "fg": 1794, + "bg": 1935, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1794 }, + { "id": "corner", "fg": 1795 }, + { "id": "edge", "fg": 1794 }, + { "id": "t_connection", "fg": 1796 }, + { "id": "end_piece", "fg": 1794 }, + { "id": "unconnected", "fg": 1794 } + ], + "rotates": false + }, + { + "id": "t_wall_v", + "fg": 2085, + "bg": 1935, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2085 }, + { "id": "corner", "fg": 1955 }, + { "id": "edge", "fg": 2085 }, + { "id": "t_connection", "fg": 1956 }, + { "id": "end_piece", "fg": 2085 }, + { "id": "unconnected", "fg": 2085 } + ], + "rotates": false + }, + { + "id": "t_wall_v_b", + "fg": 1797, + "bg": 1935, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1797 }, + { "id": "corner", "fg": 1798 }, + { "id": "edge", "fg": 1797 }, + { "id": "t_connection", "fg": 1799 }, + { "id": "end_piece", "fg": 1797 }, + { "id": "unconnected", "fg": 1797 } + ], + "rotates": false + }, + { + "id": "t_wall_v_g", + "fg": 1800, + "bg": 1935, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1800 }, + { "id": "corner", "fg": 1801 }, + { "id": "edge", "fg": 1800 }, + { "id": "t_connection", "fg": 1802 }, + { "id": "end_piece", "fg": 1800 }, + { "id": "unconnected", "fg": 1800 } + ], + "rotates": false + }, + { + "id": "t_wall_v_p", + "fg": 1806, + "bg": 1935, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1806 }, + { "id": "corner", "fg": 1807 }, + { "id": "edge", "fg": 1806 }, + { "id": "t_connection", "fg": 1808 }, + { "id": "end_piece", "fg": 1806 }, + { "id": "unconnected", "fg": 1806 } + ], + "rotates": false + }, + { + "id": "t_wall_v_r", + "fg": 1794, + "bg": 1935, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1794 }, + { "id": "corner", "fg": 1795 }, + { "id": "edge", "fg": 1794 }, + { "id": "t_connection", "fg": 1796 }, + { "id": "end_piece", "fg": 1794 }, + { "id": "unconnected", "fg": 1794 } + ], + "rotates": false + }, + { + "id": "t_wall_v_w", + "fg": 2085, + "bg": 1935, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2085 }, + { "id": "corner", "fg": 1955 }, + { "id": "edge", "fg": 2085 }, + { "id": "t_connection", "fg": 1956 }, + { "id": "end_piece", "fg": 2085 }, + { "id": "unconnected", "fg": 2085 } + ], + "rotates": false + }, + { + "id": "t_wall_v_y", + "fg": 1803, + "bg": 1935, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1803 }, + { "id": "corner", "fg": 1804 }, + { "id": "edge", "fg": 1803 }, + { "id": "t_connection", "fg": 1805 }, + { "id": "end_piece", "fg": 1803 }, + { "id": "unconnected", "fg": 1803 } + ], + "rotates": false + }, + { "id": "t_wall_wood_broken", "fg": 2080, "rotates": false }, + { "id": "t_wall_wood_chipped", "fg": 2079, "rotates": false }, + { + "id": [ "t_wall_wood", "t_wall_wood_line" ], + "fg": 1889, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2018 }, + { "id": "corner", "fg": 2019 }, + { "id": "edge", "fg": 2020 }, + { "id": "t_connection", "fg": 2021 }, + { "id": "end_piece", "fg": 2020 }, + { "id": "unconnected", "fg": 1890 } + ], + "rotates": false + }, + { + "id": "t_wall_w", + "fg": 2085, + "bg": 1935, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2085 }, + { "id": "corner", "fg": 1955 }, + { "id": "edge", "fg": 2085 }, + { "id": "t_connection", "fg": 1956 }, + { "id": "end_piece", "fg": 2085 }, + { "id": "unconnected", "fg": 2085 } + ], + "rotates": false + }, + { + "id": "t_wall_y", + "fg": 1803, + "bg": 1935, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1803 }, + { "id": "corner", "fg": 1804 }, + { "id": "edge", "fg": 1803 }, + { "id": "t_connection", "fg": 1805 }, + { "id": "end_piece", "fg": 1803 }, + { "id": "unconnected", "fg": 1803 } + ], + "rotates": false + }, + { "id": "t_water_dp", "fg": 1958, "rotates": false }, + { "id": "t_water_pool", "fg": 1957, "rotates": false }, + { "id": "t_water_pump", "fg": 1820, "rotates": false }, + { "id": "t_water_sh", "fg": 1957, "rotates": false }, + { "id": "t_wax", "fg": 1787, "rotates": false }, + { "id": "t_window_alarm", "fg": 2070, "rotates": true }, + { "id": "t_window_alarm_taped", "fg": 2071, "rotates": false }, + { + "id": "t_window_bars_alarm", + "fg": 2005, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2014 }, + { "id": "corner", "fg": 2006 }, + { "id": "edge", "fg": 2005 }, + { "id": "t_connection", "fg": 2015 }, + { "id": "end_piece", "fg": 2005 }, + { "id": "unconnected", "fg": 2005 } + ], + "rotates": false + }, + { + "id": [ "t_window_bars_alarm", "t_window_bars", "t_bars" ], + "fg": 2087, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2014 }, + { "id": "corner", "fg": 2006 }, + { "id": "edge", "fg": 2005 }, + { "id": "t_connection", "fg": 2015 }, + { "id": "end_piece", "fg": 2005 }, + { "id": "unconnected", "fg": 2087 } + ], + "rotates": false + }, + { "id": "t_window_boarded", "fg": 2074, "bg": 2058, "rotates": false }, + { "id": "t_window_boarded_noglass", "fg": 1779, "rotates": false }, + { "id": "t_window_domestic", "fg": 2070, "rotates": false }, + { "id": "t_window_domestic_taped", "fg": 2071, "rotates": false }, + { "id": "t_window_empty", "fg": 2091, "bg": 2058, "rotates": false }, + { "id": "t_window_enhanced", "fg": 1782, "rotates": false }, + { "id": "t_window_enhanced_noglass", "fg": 1783, "rotates": false }, + { "id": "t_window_frame", "fg": 2073, "bg": 2058, "rotates": false }, + { "id": [ "t_window_open", "t_window_no_curtains_open" ], "fg": 2072, "rotates": false }, + { "id": "t_window_reinforced", "fg": 1780, "rotates": false }, + { "id": "t_window_reinforced_noglass", "fg": 1781, "rotates": false }, + { "id": "t_window_stained_blue", "fg": 1771, "bg": 2058, "rotates": true }, + { "id": "t_window_stained_green", "fg": 1761, "bg": 2058, "rotates": true }, + { "id": "t_window_stained_red", "fg": 1772, "bg": 2058, "rotates": true }, + { "id": [ "t_window_taped", "t_window_no_curtains_taped" ], "fg": 2071, "rotates": false }, + { "id": [ "t_window", "t_window_no_curtains" ], "fg": 2070, "rotates": false }, + { "id": "t_wreckage", "bg": 1977, "rotates": false }, + { "id": "121_tr_rollmat_0", "fg": 2101, "rotates": false }, + { "id": "tr_beartrap", "fg": 2113, "rotates": false }, + { "id": "tr_beartrap_buried", "fg": 1824, "rotates": false }, + { "id": "tr_blade", "fg": 2128, "rotates": true }, + { "id": "tr_boobytrap", "fg": 2109, "rotates": false }, + { "id": "tr_brazier", "fg": 2107, "rotates": false }, + { "id": "tr_bubblewrap", "fg": 2127, "rotates": false }, + { "id": "tr_caltrops", "fg": 898, "rotates": false }, + { "id": "tr_cot", "fg": 2104, "rotates": false }, + { "id": "tr_crossbow", "fg": 2115, "rotates": false }, + { "id": "tr_dissector", "fg": 2118, "rotates": false }, + { "id": "tr_drain", "fg": 2112, "rotates": false }, + { "id": "tr_engine", "fg": 2108, "rotates": false }, + { "id": "tr_funnel", "fg": 2105, "rotates": false }, + { "id": "tr_fur_rollmat", "fg": 2103, "rotates": false }, + { + "id": "tr_glass_pit", + "fg": 1848, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 1843 }, + { "id": "corner", "fg": 1844 }, + { "id": "edge", "fg": 1845 }, + { "id": "t_connection", "fg": 1846 }, + { "id": "end_piece", "fg": 1847 }, + { "id": "unconnected", "fg": 1848 } + ], + "rotates": false + }, + { "id": "tr_glow", "fg": 2112, "rotates": false }, + { + "id": "tr_goo", + "fg": 2134, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2129 }, + { "id": "corner", "fg": 2130 }, + { "id": "edge", "fg": 2131 }, + { "id": "t_connection", "fg": 2132 }, + { "id": "end_piece", "fg": 2133 }, + { "id": "unconnected", "fg": 2134 } + ], + "rotates": false + }, + { "id": "tr_heavy_snare", "fg": 2120, "rotates": false }, + { "id": "tr_hum", "fg": 2112, "rotates": false }, + { "id": "tr_landmine", "fg": 2117, "rotates": false }, + { "id": "tr_landmine_buried", "fg": 1824, "rotates": false }, + { "id": "tr_lava", "bg": 1978, "rotates": false }, + { "id": "tr_leather_funnel", "fg": 2125, "rotates": false, "multitile": false }, + { "id": "tr_ledge", "bg": [ ], "rotates": false }, + { "id": "tr_light_snare", "fg": 2120, "rotates": false }, + { "id": "tr_makeshift_funnel", "fg": 2106, "rotates": false }, + { "id": "tr_nailboard", "fg": 2114, "rotates": false }, + { + "id": "tr_pit", + "fg": 1880, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2022 }, + { "id": "corner", "fg": 2023 }, + { "id": "edge", "fg": 2024 }, + { "id": "t_connection", "fg": 2025 }, + { "id": "end_piece", "fg": 2026 }, + { "id": "unconnected", "fg": 1880 } + ], + "rotates": false + }, + { + "id": "tr_portal", + "fg": 2102, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2121 }, + { "id": "corner", "fg": 2135 }, + { "id": "edge", "fg": 2122 }, + { "id": "t_connection", "fg": 2123 }, + { "id": "end_piece", "fg": 2124 }, + { "id": "unconnected", "fg": 2102 } + ], + "rotates": false + }, + { "id": "tr_rollmat", "fg": 2101, "rotates": false }, + { "id": "tr_shadow", "fg": 2112, "rotates": false }, + { "id": "tr_shotgun_1", "fg": 2116, "rotates": false }, + { "id": "tr_shotgun_2", "fg": 2116, "rotates": false }, + { "id": "tr_sinkhole", "bg": 1880, "rotates": false }, + { "id": "tr_snake", "fg": 2112, "rotates": false }, + { "id": "tr_snare", "fg": 2120, "rotates": false }, + { + "id": "tr_spike_pit", + "fg": 1923, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2034 }, + { "id": "corner", "fg": 2035 }, + { "id": "edge", "fg": 2036 }, + { "id": "t_connection", "fg": 2037 }, + { "id": "end_piece", "fg": 2038 }, + { "id": "unconnected", "fg": 1923 } + ], + "rotates": false + }, + { "id": "tr_telepad", "fg": 2126, "rotates": false }, + { "id": "tr_temple_flood", "fg": 2110, "rotates": false }, + { "id": "tr_temple_toggle", "fg": 2111, "rotates": false }, + { "id": "tr_tripwire", "fg": 2119, "rotates": false } + ], + "//": "range 1 to 2144" + }, + { + "file": "fallback.png", + "tiles": [ ], + "ascii": [ + { "offset": 0, "bold": false, "color": "BLACK" }, + { "offset": 256, "bold": true, "color": "WHITE" }, + { "offset": 512, "bold": false, "color": "WHITE" }, + { "offset": 768, "bold": true, "color": "BLACK" }, + { "offset": 1024, "bold": false, "color": "RED" }, + { "offset": 1280, "bold": false, "color": "GREEN" }, + { "offset": 1536, "bold": false, "color": "BLUE" }, + { "offset": 1792, "bold": false, "color": "CYAN" }, + { "offset": 2048, "bold": false, "color": "MAGENTA" }, + { "offset": 2304, "bold": false, "color": "YELLOW" }, + { "offset": 2560, "bold": true, "color": "RED" }, + { "offset": 2816, "bold": true, "color": "GREEN" }, + { "offset": 3072, "bold": true, "color": "BLUE" }, + { "offset": 3328, "bold": true, "color": "CYAN" }, + { "offset": 3584, "bold": true, "color": "MAGENTA" }, + { "offset": 3840, "bold": true, "color": "YELLOW" } + ] + } + ] +} diff --git a/src/achievement.cpp b/src/achievement.cpp index 2de0dd9c20c2c..e2a12ccc22ca9 100644 --- a/src/achievement.cpp +++ b/src/achievement.cpp @@ -143,6 +143,7 @@ class requirement_watcher : stat_watcher public: requirement_watcher( achievement_tracker &tracker, const achievement_requirement &req, stats_tracker &stats ) : + current_value_( req.statistic->value( stats ) ), tracker_( &tracker ), requirement_( &req ) { stats.add_watcher( req.statistic, this ); @@ -153,60 +154,24 @@ class requirement_watcher : stat_watcher bool is_satisfied( stats_tracker &stats ) { return requirement_->satisifed_by( requirement_->statistic->value( stats ) ); } - private: - achievement_tracker *tracker_; - const achievement_requirement *requirement_; -}; - -class achievement_tracker -{ - public: - // Non-movable because requirement_watcher stores a pointer to us - achievement_tracker( const achievement_tracker & ) = delete; - achievement_tracker &operator=( const achievement_tracker & ) = delete; - - achievement_tracker( const achievement &a, achievements_tracker &tracker, - stats_tracker &stats ) : - achievement_( &a ), - tracker_( &tracker ) { - for( const achievement_requirement &req : a.requirements() ) { - watchers_.push_back( std::make_unique( *this, req, stats ) ); - } - - for( const std::unique_ptr &watcher : watchers_ ) { - bool is_satisfied = watcher->is_satisfied( stats ); - sorted_watchers_[is_satisfied].insert( watcher.get() ); - } - } - - void set_requirement( requirement_watcher *watcher, bool is_satisfied ) { - if( !sorted_watchers_[is_satisfied].insert( watcher ).second ) { - // No change - return; - } - - // Remove from other; check for completion. - sorted_watchers_[!is_satisfied].erase( watcher ); - assert( sorted_watchers_[0].size() + sorted_watchers_[1].size() == watchers_.size() ); - if( sorted_watchers_[false].empty() ) { - tracker_->report_achievement( achievement_, achievement_completion::completed ); - } + std::string ui_text() const { + bool is_satisfied = requirement_->satisifed_by( current_value_ ); + nc_color c = is_satisfied ? c_green : c_yellow; + int current = current_value_.get(); + std::string result = string_format( _( "%s/%s " ), current, requirement_->target ); + result += requirement_->statistic->description(); + return colorize( result, c ); } private: - const achievement *achievement_; - achievements_tracker *tracker_; - std::vector> watchers_; - - // sorted_watchers_ maintains two sets of watchers, categorised by - // whether they watch a satisfied or unsatisfied requirement. This - // allows us to check whether the achievment is met on each new stat - // value in O(1) time. - std::array, 2> sorted_watchers_; + cata_variant current_value_; + achievement_tracker *tracker_; + const achievement_requirement *requirement_; }; void requirement_watcher::new_value( const cata_variant &new_value, stats_tracker & ) { + current_value_ = new_value; tracker_->set_requirement( this, requirement_->satisifed_by( new_value ) ); } @@ -244,6 +209,61 @@ void achievement_state::deserialize( JsonIn &jsin ) jo.read( "last_state_change", last_state_change ); } +achievement_tracker::achievement_tracker( const achievement &a, achievements_tracker &tracker, + stats_tracker &stats ) : + achievement_( &a ), + tracker_( &tracker ) +{ + for( const achievement_requirement &req : a.requirements() ) { + watchers_.push_back( std::make_unique( *this, req, stats ) ); + } + + for( const std::unique_ptr &watcher : watchers_ ) { + bool is_satisfied = watcher->is_satisfied( stats ); + sorted_watchers_[is_satisfied].insert( watcher.get() ); + } +} + +void achievement_tracker::set_requirement( requirement_watcher *watcher, bool is_satisfied ) +{ + if( !sorted_watchers_[is_satisfied].insert( watcher ).second ) { + // No change + return; + } + + // Remove from other; check for completion. + sorted_watchers_[!is_satisfied].erase( watcher ); + assert( sorted_watchers_[0].size() + sorted_watchers_[1].size() == watchers_.size() ); + + if( sorted_watchers_[false].empty() ) { + tracker_->report_achievement( achievement_, achievement_completion::completed ); + } +} + +std::string achievement_tracker::ui_text( const achievement_state *state ) const +{ + auto color_from_completion = []( achievement_completion comp ) { + switch( comp ) { + case achievement_completion::pending: + return c_yellow; + case achievement_completion::completed: + return c_light_green; + case achievement_completion::last: + break; + } + debugmsg( "Invalid achievement_completion" ); + abort(); + }; + + achievement_completion comp = state ? state->completion : achievement_completion::pending; + nc_color c = color_from_completion( comp ); + std::string result = colorize( achievement_->description(), c ) + "\n"; + for( const std::unique_ptr &watcher : watchers_ ) { + result += " " + watcher->ui_text() + "\n"; + } + return result; +} + achievements_tracker::achievements_tracker( stats_tracker &stats, const std::function &achievement_attained_callback ) : @@ -287,6 +307,30 @@ void achievements_tracker::report_achievement( const achievement *a, achievement } } +achievement_completion achievements_tracker::is_completed( const string_id &id ) const +{ + auto it = achievements_status_.find( id ); + if( it == achievements_status_.end() ) { + return achievement_completion::pending; + } + return it->second.completion; +} + +std::string achievements_tracker::ui_text_for( const achievement *ach ) const +{ + auto state_it = achievements_status_.find( ach->id ); + const achievement_state *state = nullptr; + if( state_it != achievements_status_.end() ) { + state = &state_it->second; + } + auto watcher_it = watchers_.find( ach->id ); + if( watcher_it == watchers_.end() ) { + return colorize( ach->description() + _( "\nInternal error: achievement lacks watcher." ), + c_red ); + } + return watcher_it->second.ui_text( state ); +} + void achievements_tracker::clear() { watchers_.clear(); @@ -325,6 +369,8 @@ void achievements_tracker::deserialize( JsonIn &jsin ) void achievements_tracker::init_watchers() { for( const achievement *a : valid_achievements() ) { - watchers_.emplace_back( *a, *this, *stats_ ); + watchers_.emplace( + std::piecewise_construct, std::forward_as_tuple( a->id ), + std::forward_as_tuple( *a, *this, *stats_ ) ); } } diff --git a/src/achievement.h b/src/achievement.h index dfe2d9527c40d..52edbd9a7ff1b 100644 --- a/src/achievement.h +++ b/src/achievement.h @@ -1,5 +1,5 @@ -#ifndef CATA_ACHIEVEMENT_H -#define CATA_ACHIEVEMENT_H +#ifndef CATA_SRC_ACHIEVEMENT_H +#define CATA_SRC_ACHIEVEMENT_H #include #include @@ -14,7 +14,8 @@ class JsonObject; struct achievement_requirement; -class achievement_tracker; +class achievements_tracker; +class requirement_watcher; class stats_tracker; class achievement @@ -63,6 +64,31 @@ struct achievement_state { void deserialize( JsonIn & ); }; +class achievement_tracker +{ + public: + // Non-movable because requirement_watcher stores a pointer to us + achievement_tracker( const achievement_tracker & ) = delete; + achievement_tracker &operator=( const achievement_tracker & ) = delete; + + achievement_tracker( const achievement &a, achievements_tracker &tracker, + stats_tracker &stats ); + + void set_requirement( requirement_watcher *watcher, bool is_satisfied ); + + std::string ui_text( const achievement_state * ) const; + private: + const achievement *achievement_; + achievements_tracker *tracker_; + std::vector> watchers_; + + // sorted_watchers_ maintains two sets of watchers, categorised by + // whether they watch a satisfied or unsatisfied requirement. This + // allows us to check whether the achievment is met on each new stat + // value in O(1) time. + std::array, 2> sorted_watchers_; +}; + class achievements_tracker : public event_subscriber { public: @@ -79,6 +105,9 @@ class achievements_tracker : public event_subscriber void report_achievement( const achievement *, achievement_completion ); + achievement_completion is_completed( const string_id & ) const; + std::string ui_text_for( const achievement * ) const; + void clear(); void notify( const cata::event & ) override; @@ -89,9 +118,9 @@ class achievements_tracker : public event_subscriber stats_tracker *stats_ = nullptr; std::function achievement_attained_callback_; - std::list watchers_; + std::unordered_map, achievement_tracker> watchers_; std::unordered_set> initial_achievements_; std::unordered_map, achievement_state> achievements_status_; }; -#endif // CATA_ACHIEVEMENT_H +#endif // CATA_SRC_ACHIEVEMENT_H diff --git a/src/action.h b/src/action.h index 5e188bc7f1f2b..30b6770a0fce2 100644 --- a/src/action.h +++ b/src/action.h @@ -1,6 +1,6 @@ #pragma once -#ifndef ACTION_H -#define ACTION_H +#ifndef CATA_SRC_ACTION_H +#define CATA_SRC_ACTION_H #include #include @@ -604,4 +604,4 @@ bool can_move_vertical_at( const tripoint &p, int movez ); */ bool can_examine_at( const tripoint &p ); -#endif +#endif // CATA_SRC_ACTION_H diff --git a/src/active_item_cache.h b/src/active_item_cache.h index f1163a908dc7f..2f4ad47375bca 100644 --- a/src/active_item_cache.h +++ b/src/active_item_cache.h @@ -1,6 +1,6 @@ #pragma once -#ifndef ACTIVE_ITEM_CACHE_H -#define ACTIVE_ITEM_CACHE_H +#ifndef CATA_SRC_ACTIVE_ITEM_CACHE_H +#define CATA_SRC_ACTIVE_ITEM_CACHE_H #include #include @@ -84,4 +84,4 @@ class active_item_cache void rotate_locations( int turns, const point &dim ); }; -#endif +#endif // CATA_SRC_ACTIVE_ITEM_CACHE_H diff --git a/src/activity_actor.h b/src/activity_actor.h index f30ad5e57fea9..20ad74a6c0e63 100644 --- a/src/activity_actor.h +++ b/src/activity_actor.h @@ -1,6 +1,6 @@ #pragma once -#ifndef ACTIVITY_ACTOR_H -#define ACTIVITY_ACTOR_H +#ifndef CATA_SRC_ACTIVITY_ACTOR_H +#define CATA_SRC_ACTIVITY_ACTOR_H #include #include @@ -120,4 +120,4 @@ deserialize_functions; void serialize( const cata::clone_ptr &actor, JsonOut &jsout ); void deserialize( cata::clone_ptr &actor, JsonIn &jsin ); -#endif // ACTIVITY_ACTOR_H +#endif // CATA_SRC_ACTIVITY_ACTOR_H diff --git a/src/activity_handlers.cpp b/src/activity_handlers.cpp index 3a4ed451a111c..c85fc8b0f45ef 100644 --- a/src/activity_handlers.cpp +++ b/src/activity_handlers.cpp @@ -1037,8 +1037,8 @@ static void butchery_drops_harvest( item *corpse_item, const mtype &mt, player & // apply skill before converting to items, but only if mass_ratio is defined roll *= roll_drops(); monster_weight_remaining -= roll; - roll = ceil( static_cast( roll ) / - to_gram( item::find_type( entry.drop )->weight ) ); + roll = std::ceil( static_cast( roll ) / + to_gram( item::find_type( entry.drop )->weight ) ); } else { monster_weight_remaining -= roll * to_gram( ( item::find_type( entry.drop ) )->weight ); } @@ -3665,7 +3665,7 @@ void activity_handlers::build_do_turn( player_activity *act, player *p ) const double current_progress = old_counter * base_total_moves / 10000000.0 + delta_progress; // Current progress as a percent of base_total_moves to 2 decimal places - pc->counter = round( current_progress / base_total_moves * 10000000.0 ); + pc->counter = std::round( current_progress / base_total_moves * 10000000.0 ); p->set_moves( 0 ); @@ -3787,7 +3787,7 @@ void activity_handlers::craft_do_turn( player_activity *act, player *p ) const double current_progress = craft->item_counter * base_total_moves / 10'000'000.0 + delta_progress; // Current progress as a percent of base_total_moves to 2 decimal places - craft->item_counter = round( current_progress / base_total_moves * 10'000'000.0 ); + craft->item_counter = std::round( current_progress / base_total_moves * 10'000'000.0 ); p->set_moves( 0 ); // This is to ensure we don't over count skill steps diff --git a/src/activity_handlers.h b/src/activity_handlers.h index 8122a9a0fb978..5fc2f76233015 100644 --- a/src/activity_handlers.h +++ b/src/activity_handlers.h @@ -1,6 +1,6 @@ #pragma once -#ifndef ACTIVITY_HANDLERS_H -#define ACTIVITY_HANDLERS_H +#ifndef CATA_SRC_ACTIVITY_HANDLERS_H +#define CATA_SRC_ACTIVITY_HANDLERS_H #include #include @@ -276,4 +276,4 @@ finish_functions; } // namespace activity_handlers -#endif +#endif // CATA_SRC_ACTIVITY_HANDLERS_H diff --git a/src/activity_item_handling.cpp b/src/activity_item_handling.cpp index ee0d6b66a92c1..35d95933d372e 100644 --- a/src/activity_item_handling.cpp +++ b/src/activity_item_handling.cpp @@ -1269,7 +1269,7 @@ static activity_reason_info can_do_activity_there( const activity_id &act, playe return activity_reason_info::fail( NO_ZONE ); } // if the vehicle is moving or player is controlling it. - if( abs( veh->velocity ) > 100 || veh->player_in_control( g->u ) ) { + if( std::abs( veh->velocity ) > 100 || veh->player_in_control( g->u ) ) { return activity_reason_info::fail( NO_ZONE ); } for( const npc &guy : g->all_npcs() ) { @@ -1323,8 +1323,8 @@ static activity_reason_info can_do_activity_there( const activity_id &act, playe continue; } const int max_lift = p.best_nearby_lifting_assist( src_loc ); - const int lvl = ceil( units::quantity( base.weight() ) / - TOOL_LIFT_FACTOR ); + const int lvl = std::ceil( units::quantity( base.weight() ) / + TOOL_LIFT_FACTOR ); const bool use_aid = max_lift >= lvl; const bool use_str = p.can_lift( base ); if( !( use_aid || use_str ) ) { diff --git a/src/activity_type.h b/src/activity_type.h index 3ac801165ee94..f19b7b14db818 100644 --- a/src/activity_type.h +++ b/src/activity_type.h @@ -1,6 +1,6 @@ #pragma once -#ifndef ACTIVITY_TYPE_H -#define ACTIVITY_TYPE_H +#ifndef CATA_SRC_ACTIVITY_TYPE_H +#define CATA_SRC_ACTIVITY_TYPE_H #include @@ -85,4 +85,4 @@ class activity_type static void reset(); }; -#endif +#endif // CATA_SRC_ACTIVITY_TYPE_H diff --git a/src/addiction.h b/src/addiction.h index 4f0ba7ab6cd1f..aed7153861fae 100644 --- a/src/addiction.h +++ b/src/addiction.h @@ -1,6 +1,6 @@ #pragma once -#ifndef ADDICTION_H -#define ADDICTION_H +#ifndef CATA_SRC_ADDICTION_H +#define CATA_SRC_ADDICTION_H #include @@ -28,4 +28,4 @@ add_type addiction_type( const std::string &name ); std::string addiction_text( const addiction &cur ); -#endif +#endif // CATA_SRC_ADDICTION_H diff --git a/src/advanced_inv.cpp b/src/advanced_inv.cpp index 71b2e77271c26..d07e4f21f8941 100644 --- a/src/advanced_inv.cpp +++ b/src/advanced_inv.cpp @@ -1055,12 +1055,8 @@ bool advanced_inventory::show_sort_menu( advanced_inventory_pane &pane ) return true; } -void advanced_inventory::display() +input_context advanced_inventory::register_ctxt() const { - init(); - - g->u.inv.restack( g->u ); - input_context ctxt( "ADVANCED_INVENTORY" ); ctxt.register_action( "HELP_KEYBINDINGS" ); ctxt.register_action( "QUIT" ); @@ -1101,6 +1097,330 @@ void advanced_inventory::display() ctxt.register_action( "ITEMS_DEFAULT" ); ctxt.register_action( "SAVE_DEFAULT" ); + return ctxt; +} + +void advanced_inventory::redraw_sidebar() +{ + input_context ctxt( "ADVANCED_INVENTORY" ); + ctxt.register_action( "HELP_KEYBINDINGS" ); + + if( redraw && !is_processing() ) { + werase( head ); + werase( minimap ); + werase( mm_border ); + draw_border( head ); + Messages::display_messages( head, 2, 1, w_width - 1, head_height - 2 ); + draw_minimap(); + right_print( head, 0, +3, c_white, string_format( + _( "< [%s] keybindings >" ), + ctxt.get_desc( "HELP_KEYBINDINGS" ) ) ); + if( g->u.has_watch() ) { + const std::string time = to_string_time_of_day( calendar::turn ); + mvwprintz( head, point( 2, 0 ), c_white, time ); + } + wrefresh( head ); + refresh_minimap(); + } + redraw = false; +} + +void advanced_inventory::change_square( const aim_location changeSquare, + advanced_inventory_pane &dpane, advanced_inventory_pane &spane ) +{ + if( panes[left].get_area() == changeSquare || panes[right].get_area() == changeSquare ) { + if( squares[changeSquare].can_store_in_vehicle() && changeSquare != AIM_DRAGGED ) { + // only deal with spane, as you can't _directly_ change dpane + if( dpane.get_area() == changeSquare ) { + spane.set_area( squares[changeSquare], !dpane.in_vehicle() ); + spane.recalc = true; + } else if( spane.get_area() == dpane.get_area() ) { + // swap the `in_vehicle` element of each pane if "one in, one out" + spane.set_area( squares[spane.get_area()], !spane.in_vehicle() ); + dpane.set_area( squares[dpane.get_area()], !dpane.in_vehicle() ); + recalc = true; + } + } else { + swap_panes(); + } + redraw = true; + // we need to check the original area if we can place items in vehicle storage + } else if( squares[changeSquare].canputitems( spane.get_cur_item_ptr() ) ) { + bool in_vehicle_cargo = false; + if( changeSquare == AIM_CONTAINER ) { + squares[changeSquare].set_container( spane.get_cur_item_ptr() ); + } else if( spane.get_area() == AIM_CONTAINER ) { + squares[changeSquare].set_container( nullptr ); + // auto select vehicle if items exist at said square, or both are empty + } else if( squares[changeSquare].can_store_in_vehicle() && spane.get_area() != changeSquare ) { + if( changeSquare == AIM_DRAGGED ) { + in_vehicle_cargo = true; + } else { + // check item stacks in vehicle and map at said square + auto sq = squares[changeSquare]; + auto map_stack = g->m.i_at( sq.pos ); + auto veh_stack = sq.veh->get_items( sq.vstor ); + // auto switch to vehicle storage if vehicle items are there, or neither are there + if( !veh_stack.empty() || map_stack.empty() ) { + in_vehicle_cargo = true; + } + } + } + spane.set_area( squares[changeSquare], in_vehicle_cargo ); + spane.index = 0; + spane.recalc = true; + if( dpane.get_area() == AIM_ALL ) { + dpane.recalc = true; + } + redraw = true; + } else { + popup( _( "You can't put items there!" ) ); + // to clear the popup + redraw = true; + } +} + +void advanced_inventory::start_activity( const aim_location destarea, const aim_location srcarea, + advanced_inv_listitem *sitem, int &amount_to_move, + const bool from_vehicle, const bool to_vehicle ) const +{ + + const bool by_charges = sitem->items.front()->count_by_charges(); + + if( destarea == AIM_INVENTORY || destarea == AIM_WORN ) { + if( destarea == AIM_INVENTORY ) { + g->u.assign_activity( ACT_PICKUP ); + g->u.activity.coords.push_back( g->u.pos() ); + } else { + g->u.assign_activity( ACT_WEAR ); + } + + if( by_charges ) { + if( from_vehicle ) { + g->u.activity.targets.emplace_back( vehicle_cursor( *squares[srcarea].veh, squares[srcarea].vstor ), + sitem->items.front() ); + } else { + g->u.activity.targets.emplace_back( map_cursor( squares[srcarea].pos ), sitem->items.front() ); + } + g->u.activity.values.push_back( amount_to_move ); + } else { + for( std::list::iterator it = sitem->items.begin(); amount_to_move > 0 && + it != sitem->items.end(); ++it ) { + if( from_vehicle ) { + g->u.activity.targets.emplace_back( vehicle_cursor( *squares[srcarea].veh, squares[srcarea].vstor ), + *it ); + } else { + g->u.activity.targets.emplace_back( map_cursor( squares[srcarea].pos ), *it ); + } + g->u.activity.values.push_back( 0 ); + --amount_to_move; + } + } + } else { + // Vehicle and map destinations are handled similarly. + // Stash the destination + const tripoint relative_destination = squares[destarea].off; + + // Find target items and quantities thereof for the new activity + std::vector target_items; + std::vector quantities; + if( by_charges ) { + if( from_vehicle ) { + target_items.emplace_back( vehicle_cursor( *squares[srcarea].veh, squares[srcarea].vstor ), + sitem->items.front() ); + } else { + target_items.emplace_back( map_cursor( squares[srcarea].pos ), sitem->items.front() ); + } + quantities.push_back( amount_to_move ); + } else { + for( std::list::iterator it = sitem->items.begin(); amount_to_move > 0 && + it != sitem->items.end(); ++it ) { + if( from_vehicle ) { + target_items.emplace_back( vehicle_cursor( *squares[srcarea].veh, squares[srcarea].vstor ), + *it ); + } else { + target_items.emplace_back( map_cursor( squares[srcarea].pos ), *it ); + } + quantities.push_back( 0 ); + --amount_to_move; + } + } + + g->u.assign_activity( player_activity( move_items_activity_actor( + target_items, + quantities, + to_vehicle, + relative_destination + ) ) ); + } +} + +bool advanced_inventory::action_move_item( advanced_inv_listitem *sitem, + advanced_inventory_pane &dpane, const advanced_inventory_pane &spane, + const std::string &action ) +{ + bool exit = false; + if( sitem == nullptr || !sitem->is_item_entry() ) { + return false; + } + aim_location destarea = dpane.get_area(); + aim_location srcarea = sitem->area; + bool restore_area = destarea == AIM_ALL; + if( !query_destination( destarea ) ) { + return false; + } + // Not necessarily equivalent to spane.in_vehicle() if using AIM_ALL + bool from_vehicle = sitem->from_vehicle; + bool to_vehicle = dpane.in_vehicle(); + + // AIM_ALL should disable same area check and handle it with proper filtering instead. + // This is a workaround around the lack of vehicle location info in + // either aim_location or advanced_inv_listitem. + if( squares[srcarea].is_same( squares[destarea] ) && + spane.get_area() != AIM_ALL && + spane.in_vehicle() == dpane.in_vehicle() ) { + popup( _( "Source area is the same as destination (%s)." ), squares[destarea].name ); + // popup has messed up the screen + redraw = true; + return false; + } + assert( !sitem->items.empty() ); + int amount_to_move = 0; + if( !query_charges( destarea, *sitem, action, amount_to_move ) ) { + return false; + } + // This makes sure that all item references in the advanced_inventory_pane::items vector + // are recalculated, even when they might not have changed, but they could (e.g. items + // taken from inventory, but unable to put into the cargo trunk go back into the inventory, + // but are potentially at a different place). + recalc = true; + assert( amount_to_move > 0 ); + if( destarea == AIM_CONTAINER ) { + if( !move_content( *sitem->items.front(), + *squares[destarea].get_container( to_vehicle ) ) ) { + redraw = true; + return false; + } + } else if( srcarea == AIM_INVENTORY && destarea == AIM_WORN ) { + + // make sure advanced inventory is reopened after activity completion. + do_return_entry(); + + g->u.assign_activity( ACT_WEAR ); + + g->u.activity.targets.emplace_back( g->u, sitem->items.front() ); + g->u.activity.values.push_back( amount_to_move ); + + // exit so that the activity can be carried out + exit = true; + + } else if( srcarea == AIM_INVENTORY || srcarea == AIM_WORN ) { + + // make sure advanced inventory is reopened after activity completion. + do_return_entry(); + + // if worn, we need to fix with the worn index number (starts at -2, as -1 is weapon) + int idx = srcarea == AIM_INVENTORY ? sitem->idx : player::worn_position_to_index( sitem->idx ); + + if( srcarea == AIM_WORN && destarea == AIM_INVENTORY ) { + // this is ok because worn items are never stacked (can't move more than 1). + g->u.takeoff( idx ); + + // exit so that the action can be carried out + exit = true; + } else { + // important if item is worn + if( g->u.can_unwield( g->u.i_at( idx ) ).success() ) { + g->u.assign_activity( ACT_DROP ); + g->u.activity.placement = squares[destarea].off; + + // incase there is vehicle cargo space at dest but the player wants to drop to ground + if( !to_vehicle ) { + g->u.activity.str_values.push_back( "force_ground" ); + } + + g->u.activity.targets.push_back( item_location( g->u, &g->u.i_at( idx ) ) ); + g->u.activity.values.push_back( amount_to_move ); + + // exit so that the activity can be carried out + exit = true; + } + } + } else { + // from map/vehicle: start ACT_PICKUP or ACT_MOVE_ITEMS as necessary + // Make sure advanced inventory is reopened after activity completion. + do_return_entry(); + start_activity( destarea, srcarea, sitem, amount_to_move, from_vehicle, to_vehicle ); + + // exit so that the activity can be carried out + exit = true; + } + + // if dest was AIM_ALL then we used query_destination and should undo that + if( restore_area ) { + dpane.restore_area(); + } + return exit; +} + +void advanced_inventory::action_examine( advanced_inv_listitem *sitem, + advanced_inventory_pane &spane ) +{ + int ret = 0; + const int info_width = w_width / 2; + const int info_startx = colstart + ( src == advanced_inventory::side::left ? info_width : 0 ); + if( spane.get_area() == AIM_INVENTORY || spane.get_area() == AIM_WORN ) { + int idx = spane.get_area() == AIM_INVENTORY ? sitem->idx : + player::worn_position_to_index( sitem->idx ); + item_location loc( g->u, &g->u.i_at( idx ) ); + // Setup a "return to AIM" activity. If examining the item creates a new activity + // (e.g. reading, reloading, activating), the new activity will be put on top of + // "return to AIM". Once the new activity is finished, "return to AIM" comes back + // (automatically, see player activity handling) and it re-opens the AIM. + // If examining the item did not create a new activity, we have to remove + // "return to AIM". + do_return_entry(); + assert( g->u.has_activity( ACT_ADV_INVENTORY ) ); + ret = g->inventory_item_menu( loc, info_startx, info_width, + src == advanced_inventory::side::left ? game::LEFT_OF_INFO : game::RIGHT_OF_INFO ); + if( !g->u.has_activity( ACT_ADV_INVENTORY ) ) { + exit = true; + } else { + g->u.cancel_activity(); + } + // Might have changed a stack (activated an item, repaired an item, etc.) + if( spane.get_area() == AIM_INVENTORY ) { + g->u.inv.restack( g->u ); + } + recalc = true; + } else { + item &it = *sitem->items.front(); + std::vector vThisItem; + std::vector vDummy; + it.info( true, vThisItem ); + + item_info_data data( it.tname(), it.type_name(), vThisItem, vDummy ); + data.handle_scrolling = true; + + ret = draw_item_info( info_startx, info_width, 0, 0, data ).get_first_input(); + } + if( ret == KEY_NPAGE || ret == KEY_DOWN ) { + spane.scroll_by( +1 ); + } else if( ret == KEY_PPAGE || ret == KEY_UP ) { + spane.scroll_by( -1 ); + } + // item info window overwrote the other pane and the header + redraw = true; +} + +void advanced_inventory::display() +{ + init(); + + g->u.inv.restack( g->u ); + + input_context ctxt{ register_ctxt() }; + exit = false; recalc = true; redraw = true; @@ -1118,25 +1438,8 @@ void advanced_inventory::display() redraw_pane( advanced_inventory::side::left ); redraw_pane( advanced_inventory::side::right ); + redraw_sidebar(); - if( redraw && !is_processing() ) { - werase( head ); - werase( minimap ); - werase( mm_border ); - draw_border( head ); - Messages::display_messages( head, 2, 1, w_width - 1, head_height - 2 ); - draw_minimap(); - right_print( head, 0, +3, c_white, string_format( - _( "< [%s] keybindings >" ), - ctxt.get_desc( "HELP_KEYBINDINGS" ) ) ); - if( g->u.has_watch() ) { - const std::string time = to_string_time_of_day( calendar::turn ); - mvwprintz( head, point( 2, 0 ), c_white, time ); - } - wrefresh( head ); - refresh_minimap(); - } - redraw = false; recalc = false; // source and destination pane advanced_inventory_pane &spane = panes[src]; @@ -1171,56 +1474,7 @@ void advanced_inventory::display() popup( _( "Default layout was saved." ) ); redraw = true; } else if( get_square( action, changeSquare ) ) { - if( panes[left].get_area() == changeSquare || panes[right].get_area() == changeSquare ) { - if( squares[changeSquare].can_store_in_vehicle() && changeSquare != AIM_DRAGGED ) { - // only deal with spane, as you can't _directly_ change dpane - if( dpane.get_area() == changeSquare ) { - spane.set_area( squares[changeSquare], !dpane.in_vehicle() ); - spane.recalc = true; - } else if( spane.get_area() == dpane.get_area() ) { - // swap the `in_vehicle` element of each pane if "one in, one out" - spane.set_area( squares[spane.get_area()], !spane.in_vehicle() ); - dpane.set_area( squares[dpane.get_area()], !dpane.in_vehicle() ); - recalc = true; - } - } else { - swap_panes(); - } - redraw = true; - // we need to check the original area if we can place items in vehicle storage - } else if( squares[changeSquare].canputitems( spane.get_cur_item_ptr() ) ) { - bool in_vehicle_cargo = false; - if( changeSquare == AIM_CONTAINER ) { - squares[changeSquare].set_container( spane.get_cur_item_ptr() ); - } else if( spane.get_area() == AIM_CONTAINER ) { - squares[changeSquare].set_container( nullptr ); - // auto select vehicle if items exist at said square, or both are empty - } else if( squares[changeSquare].can_store_in_vehicle() && spane.get_area() != changeSquare ) { - if( changeSquare == AIM_DRAGGED ) { - in_vehicle_cargo = true; - } else { - // check item stacks in vehicle and map at said square - auto sq = squares[changeSquare]; - auto map_stack = g->m.i_at( sq.pos ); - auto veh_stack = sq.veh->get_items( sq.vstor ); - // auto switch to vehicle storage if vehicle items are there, or neither are there - if( !veh_stack.empty() || map_stack.empty() ) { - in_vehicle_cargo = true; - } - } - } - spane.set_area( squares[changeSquare], in_vehicle_cargo ); - spane.index = 0; - spane.recalc = true; - if( dpane.get_area() == AIM_ALL ) { - dpane.recalc = true; - } - redraw = true; - } else { - popup( _( "You can't put items there!" ) ); - // to clear the popup - redraw = true; - } + change_square( changeSquare, dpane, spane ); } else if( action == "TOGGLE_FAVORITE" ) { if( sitem == nullptr || !sitem->is_item_entry() ) { continue; @@ -1234,173 +1488,7 @@ void advanced_inventory::display() } else if( action == "MOVE_SINGLE_ITEM" || action == "MOVE_VARIABLE_ITEM" || action == "MOVE_ITEM_STACK" ) { - if( sitem == nullptr || !sitem->is_item_entry() ) { - continue; - } - aim_location destarea = dpane.get_area(); - aim_location srcarea = sitem->area; - bool restore_area = destarea == AIM_ALL; - if( !query_destination( destarea ) ) { - continue; - } - // Not necessarily equivalent to spane.in_vehicle() if using AIM_ALL - bool from_vehicle = sitem->from_vehicle; - bool to_vehicle = dpane.in_vehicle(); - - // AIM_ALL should disable same area check and handle it with proper filtering instead. - // This is a workaround around the lack of vehicle location info in - // either aim_location or advanced_inv_listitem. - if( squares[srcarea].is_same( squares[destarea] ) && - spane.get_area() != AIM_ALL && - spane.in_vehicle() == dpane.in_vehicle() ) { - popup( _( "Source area is the same as destination (%s)." ), squares[destarea].name ); - // popup has messed up the screen - redraw = true; - continue; - } - assert( !sitem->items.empty() ); - const bool by_charges = sitem->items.front()->count_by_charges(); - int amount_to_move = 0; - if( !query_charges( destarea, *sitem, action, amount_to_move ) ) { - continue; - } - // This makes sure that all item references in the advanced_inventory_pane::items vector - // are recalculated, even when they might not have changed, but they could (e.g. items - // taken from inventory, but unable to put into the cargo trunk go back into the inventory, - // but are potentially at a different place). - recalc = true; - assert( amount_to_move > 0 ); - if( destarea == AIM_CONTAINER ) { - if( !move_content( *sitem->items.front(), - *squares[destarea].get_container( to_vehicle ) ) ) { - redraw = true; - continue; - } - } else if( srcarea == AIM_INVENTORY && destarea == AIM_WORN ) { - - // make sure advanced inventory is reopened after activity completion. - do_return_entry(); - - g->u.assign_activity( ACT_WEAR ); - - g->u.activity.targets.emplace_back( g->u, sitem->items.front() ); - g->u.activity.values.push_back( amount_to_move ); - - // exit so that the activity can be carried out - exit = true; - - } else if( srcarea == AIM_INVENTORY || srcarea == AIM_WORN ) { - - // make sure advanced inventory is reopened after activity completion. - do_return_entry(); - - // if worn, we need to fix with the worn index number (starts at -2, as -1 is weapon) - int idx = srcarea == AIM_INVENTORY ? sitem->idx : player::worn_position_to_index( sitem->idx ); - - if( srcarea == AIM_WORN && destarea == AIM_INVENTORY ) { - // this is ok because worn items are never stacked (can't move more than 1). - g->u.takeoff( idx ); - - // exit so that the action can be carried out - exit = true; - } else { - // important if item is worn - if( g->u.can_unwield( g->u.i_at( idx ) ).success() ) { - g->u.assign_activity( ACT_DROP ); - g->u.activity.placement = squares[destarea].off; - - // incase there is vehicle cargo space at dest but the player wants to drop to ground - if( !to_vehicle ) { - g->u.activity.str_values.push_back( "force_ground" ); - } - - g->u.activity.targets.push_back( item_location( g->u, &g->u.i_at( idx ) ) ); - g->u.activity.values.push_back( amount_to_move ); - - // exit so that the activity can be carried out - exit = true; - } - } - } else { - // from map/vehicle: start ACT_PICKUP or ACT_MOVE_ITEMS as necessary - // Make sure advanced inventory is reopened after activity completion. - do_return_entry(); - - if( destarea == AIM_INVENTORY || destarea == AIM_WORN ) { - if( destarea == AIM_INVENTORY ) { - g->u.assign_activity( ACT_PICKUP ); - g->u.activity.coords.push_back( g->u.pos() ); - } else { - g->u.assign_activity( ACT_WEAR ); - } - - if( by_charges ) { - if( from_vehicle ) { - g->u.activity.targets.emplace_back( vehicle_cursor( *squares[srcarea].veh, squares[srcarea].vstor ), - sitem->items.front() ); - } else { - g->u.activity.targets.emplace_back( map_cursor( squares[srcarea].pos ), sitem->items.front() ); - } - g->u.activity.values.push_back( amount_to_move ); - } else { - for( std::list::iterator it = sitem->items.begin(); amount_to_move > 0 && - it != sitem->items.end(); ++it ) { - if( from_vehicle ) { - g->u.activity.targets.emplace_back( vehicle_cursor( *squares[srcarea].veh, squares[srcarea].vstor ), - *it ); - } else { - g->u.activity.targets.emplace_back( map_cursor( squares[srcarea].pos ), *it ); - } - g->u.activity.values.push_back( 0 ); - --amount_to_move; - } - } - } else { - // Vehicle and map destinations are handled similarly. - // Stash the destination - const tripoint relative_destination = squares[destarea].off; - - // Find target items and quantities thereof for the new activity - std::vector target_items; - std::vector quantities; - if( by_charges ) { - if( from_vehicle ) { - target_items.emplace_back( vehicle_cursor( *squares[srcarea].veh, squares[srcarea].vstor ), - sitem->items.front() ); - } else { - target_items.emplace_back( map_cursor( squares[srcarea].pos ), sitem->items.front() ); - } - quantities.push_back( amount_to_move ); - } else { - for( std::list::iterator it = sitem->items.begin(); amount_to_move > 0 && - it != sitem->items.end(); ++it ) { - if( from_vehicle ) { - target_items.emplace_back( vehicle_cursor( *squares[srcarea].veh, squares[srcarea].vstor ), - *it ); - } else { - target_items.emplace_back( map_cursor( squares[srcarea].pos ), *it ); - } - quantities.push_back( 0 ); - --amount_to_move; - } - } - - g->u.assign_activity( player_activity( move_items_activity_actor( - target_items, - quantities, - to_vehicle, - relative_destination - ) ) ); - } - - // exit so that the activity can be carried out - exit = true; - } - - // if dest was AIM_ALL then we used query_destination and should undo that - if( restore_area ) { - dpane.restore_area(); - } + exit = action_move_item( sitem, dpane, spane, action ); } else if( action == "MOVE_ALL_ITEMS" ) { exit = move_all_items(); recalc = true; @@ -1455,51 +1543,7 @@ void advanced_inventory::display() if( sitem == nullptr || !sitem->is_item_entry() ) { continue; } - int ret = 0; - const int info_width = w_width / 2; - const int info_startx = colstart + ( src == advanced_inventory::side::left ? info_width : 0 ); - if( spane.get_area() == AIM_INVENTORY || spane.get_area() == AIM_WORN ) { - int idx = spane.get_area() == AIM_INVENTORY ? sitem->idx : - player::worn_position_to_index( sitem->idx ); - item_location loc( g->u, &g->u.i_at( idx ) ); - // Setup a "return to AIM" activity. If examining the item creates a new activity - // (e.g. reading, reloading, activating), the new activity will be put on top of - // "return to AIM". Once the new activity is finished, "return to AIM" comes back - // (automatically, see player activity handling) and it re-opens the AIM. - // If examining the item did not create a new activity, we have to remove - // "return to AIM". - do_return_entry(); - assert( g->u.has_activity( ACT_ADV_INVENTORY ) ); - ret = g->inventory_item_menu( loc, info_startx, info_width, - src == advanced_inventory::side::left ? game::LEFT_OF_INFO : game::RIGHT_OF_INFO ); - if( !g->u.has_activity( ACT_ADV_INVENTORY ) ) { - exit = true; - } else { - g->u.cancel_activity(); - } - // Might have changed a stack (activated an item, repaired an item, etc.) - if( spane.get_area() == AIM_INVENTORY ) { - g->u.inv.restack( g->u ); - } - recalc = true; - } else { - item &it = *sitem->items.front(); - std::vector vThisItem; - std::vector vDummy; - it.info( true, vThisItem ); - - item_info_data data( it.tname(), it.type_name(), vThisItem, vDummy ); - data.handle_scrolling = true; - - ret = draw_item_info( info_startx, info_width, 0, 0, data ).get_first_input(); - } - if( ret == KEY_NPAGE || ret == KEY_DOWN ) { - spane.scroll_by( +1 ); - } else if( ret == KEY_PPAGE || ret == KEY_UP ) { - spane.scroll_by( -1 ); - } - // item info window overwrote the other pane and the header - redraw = true; + action_examine( sitem, spane ); } else if( action == "QUIT" ) { exit = true; } else if( action == "PAGE_DOWN" ) { diff --git a/src/advanced_inv.h b/src/advanced_inv.h index 602e76368badb..5319f01eeeeff 100644 --- a/src/advanced_inv.h +++ b/src/advanced_inv.h @@ -1,6 +1,6 @@ #pragma once -#ifndef ADVANCED_INV_H -#define ADVANCED_INV_H +#ifndef CATA_SRC_ADVANCED_INV_H +#define CATA_SRC_ADVANCED_INV_H #include #include @@ -12,6 +12,7 @@ #include "advanced_inv_pane.h" #include "cursesdef.h" +class input_context; class item; struct advanced_inv_save_state; @@ -110,6 +111,27 @@ class advanced_inventory bool exit = false; advanced_inv_save_state *save_state; + + /** + * registers all the ctxt for display() + */ + input_context register_ctxt() const; + /** + * a smaller chunk of display() + */ + void start_activity( aim_location destarea, aim_location srcarea, + advanced_inv_listitem *sitem, int &amount_to_move, + bool from_vehicle, bool to_vehicle ) const; + + /** + * returns whether the display loop exits or not + */ + bool action_move_item( advanced_inv_listitem *sitem, + advanced_inventory_pane &dpane, const advanced_inventory_pane &spane, + const std::string &action ); + + void action_examine( advanced_inv_listitem *sitem, advanced_inventory_pane &spane ); + // store/load settings (such as index, filter, etc) void save_settings( bool only_panes ); void load_settings(); @@ -124,6 +146,7 @@ class advanced_inventory void print_items( const advanced_inventory_pane &pane, bool active ); void recalc_pane( side p ); void redraw_pane( side p ); + void redraw_sidebar(); // Returns the x coordinate where the header started. The header is // displayed right of it, everything left of it is till free. int print_header( advanced_inventory_pane &pane, aim_location sel ); @@ -137,6 +160,8 @@ class advanced_inventory * stored in ret), false otherwise. */ bool get_square( const std::string &action, aim_location &ret ); + void change_square( aim_location changeSquare, advanced_inventory_pane &dpane, + advanced_inventory_pane &spane ); /** * Show the sort-by menu and change the sorting of this pane accordingly. * @return whether the sort order was actually changed. @@ -172,4 +197,4 @@ class advanced_inventory const std::string &action, int &amount ); }; -#endif +#endif // CATA_SRC_ADVANCED_INV_H diff --git a/src/advanced_inv_area.h b/src/advanced_inv_area.h index 4fb9758770094..0d285c5612bed 100644 --- a/src/advanced_inv_area.h +++ b/src/advanced_inv_area.h @@ -1,6 +1,6 @@ #pragma once -#ifndef ADVANCED_INV_AREA_H -#define ADVANCED_INV_AREA_H +#ifndef CATA_SRC_ADVANCED_INV_AREA_H +#define CATA_SRC_ADVANCED_INV_AREA_H #include "point.h" #include "units.h" @@ -108,4 +108,4 @@ class advanced_inv_area return veh != nullptr && vstor >= 0; } }; -#endif +#endif // CATA_SRC_ADVANCED_INV_AREA_H diff --git a/src/advanced_inv_listitem.h b/src/advanced_inv_listitem.h index 0ad5865e3cbee..856d6004affd6 100644 --- a/src/advanced_inv_listitem.h +++ b/src/advanced_inv_listitem.h @@ -1,6 +1,6 @@ #pragma once -#ifndef ADVANCED_INV_LISTITEM_H -#define ADVANCED_INV_LISTITEM_H +#ifndef CATA_SRC_ADVANCED_INV_LISTITEM_H +#define CATA_SRC_ADVANCED_INV_LISTITEM_H #include #include @@ -104,4 +104,4 @@ class advanced_inv_listitem advanced_inv_listitem( const std::list &list, int index, aim_location area, bool from_vehicle ); }; -#endif +#endif // CATA_SRC_ADVANCED_INV_LISTITEM_H diff --git a/src/advanced_inv_pane.h b/src/advanced_inv_pane.h index ef5c0d9949151..1473e8f622018 100644 --- a/src/advanced_inv_pane.h +++ b/src/advanced_inv_pane.h @@ -1,6 +1,6 @@ #pragma once -#ifndef ADVANCED_INV_PANE_H -#define ADVANCED_INV_PANE_H +#ifndef CATA_SRC_ADVANCED_INV_PANE_H +#define CATA_SRC_ADVANCED_INV_PANE_H #include #include @@ -133,4 +133,4 @@ class advanced_inventory_pane mutable std::map> filtercache; }; -#endif +#endif // CATA_SRC_ADVANCED_INV_PANE_H diff --git a/src/ammo.h b/src/ammo.h index 173ab6ff7c88d..f159354b07730 100644 --- a/src/ammo.h +++ b/src/ammo.h @@ -1,6 +1,6 @@ #pragma once -#ifndef AMMO_H -#define AMMO_H +#ifndef CATA_SRC_AMMO_H +#define CATA_SRC_AMMO_H #include #include @@ -31,4 +31,4 @@ class ammunition_type static void check_consistency(); }; -#endif +#endif // CATA_SRC_AMMO_H diff --git a/src/ammo_effect.h b/src/ammo_effect.h index 6e3856c3e3618..0df808e38b547 100644 --- a/src/ammo_effect.h +++ b/src/ammo_effect.h @@ -1,6 +1,6 @@ #pragma once -#ifndef AMMO_EFFECT_H -#define AMMO_EFFECT_H +#ifndef CATA_SRC_AMMO_EFFECT_H +#define CATA_SRC_AMMO_EFFECT_H #include #include @@ -67,4 +67,4 @@ const std::vector &get_all(); extern ammo_effect_id AE_NULL; -#endif +#endif // CATA_SRC_AMMO_EFFECT_H diff --git a/src/anatomy.h b/src/anatomy.h index e086306159de7..8ae661ee32157 100644 --- a/src/anatomy.h +++ b/src/anatomy.h @@ -1,6 +1,6 @@ #pragma once -#ifndef ANATOMY_H -#define ANATOMY_H +#ifndef CATA_SRC_ANATOMY_H +#define CATA_SRC_ANATOMY_H #include #include @@ -59,4 +59,4 @@ class anatomy extern anatomy_id human_anatomy; -#endif +#endif // CATA_SRC_ANATOMY_H diff --git a/src/animation.h b/src/animation.h index 2393650d495ed..1268fb5d8d966 100644 --- a/src/animation.h +++ b/src/animation.h @@ -1,6 +1,6 @@ #pragma once -#ifndef ANIMATION_H -#define ANIMATION_H +#ifndef CATA_SRC_ANIMATION_H +#define CATA_SRC_ANIMATION_H #include "color.h" @@ -31,4 +31,4 @@ struct explosion_tile { nc_color color; }; -#endif \ No newline at end of file +#endif // CATA_SRC_ANIMATION_H \ No newline at end of file diff --git a/src/artifact.h b/src/artifact.h index 5269dbbfb4c9e..9a5e4818cff05 100644 --- a/src/artifact.h +++ b/src/artifact.h @@ -1,6 +1,6 @@ #pragma once -#ifndef ARTIFACT_H -#define ARTIFACT_H +#ifndef CATA_SRC_ARTIFACT_H +#define CATA_SRC_ARTIFACT_H #include @@ -132,4 +132,4 @@ bool save_artifacts( const std::string &path ); bool check_art_charge_req( item &it ); -#endif +#endif // CATA_SRC_ARTIFACT_H diff --git a/src/assign.h b/src/assign.h index c959d991bbbab..62f0725edacdb 100644 --- a/src/assign.h +++ b/src/assign.h @@ -1,6 +1,6 @@ #pragma once -#ifndef ASSIGN_H -#define ASSIGN_H +#ifndef CATA_SRC_ASSIGN_H +#define CATA_SRC_ASSIGN_H #include #include @@ -871,4 +871,4 @@ inline bool assign( const JsonObject &jo, const std::string &name, damage_instan return true; } -#endif +#endif // CATA_SRC_ASSIGN_H diff --git a/src/auto_note.h b/src/auto_note.h index 9c3f4282ad4be..cd444a47e4bd0 100644 --- a/src/auto_note.h +++ b/src/auto_note.h @@ -1,6 +1,6 @@ #pragma once -#ifndef AUTO_NOTE_H -#define AUTO_NOTE_H +#ifndef CATA_SRC_AUTO_NOTE_H +#define CATA_SRC_AUTO_NOTE_H #include #include @@ -88,4 +88,4 @@ class auto_note_settings auto_notes::auto_note_settings &get_auto_notes_settings(); -#endif // AUTO_NOTE_H +#endif // CATA_SRC_AUTO_NOTE_H diff --git a/src/auto_pickup.h b/src/auto_pickup.h index dddbf2c34b184..65d8c5c105ff6 100644 --- a/src/auto_pickup.h +++ b/src/auto_pickup.h @@ -1,6 +1,6 @@ #pragma once -#ifndef AUTO_PICKUP_H -#define AUTO_PICKUP_H +#ifndef CATA_SRC_AUTO_PICKUP_H +#define CATA_SRC_AUTO_PICKUP_H #include #include @@ -165,4 +165,4 @@ class npc_settings : public base_settings auto_pickup::player_settings &get_auto_pickup(); -#endif +#endif // CATA_SRC_AUTO_PICKUP_H diff --git a/src/avatar.cpp b/src/avatar.cpp index b54fc02aa93a8..d403f81730361 100644 --- a/src/avatar.cpp +++ b/src/avatar.cpp @@ -1702,9 +1702,9 @@ std::string points_left::to_string() _( "Points left: %d%c%d%c%d=%d" ), stat_points_left() >= 0 ? "light_gray" : "red", stat_points, trait_points >= 0 ? '+' : '-', - trait_points_left() >= 0 ? "light_gray" : "red", abs( trait_points ), + trait_points_left() >= 0 ? "light_gray" : "red", std::abs( trait_points ), skill_points >= 0 ? '+' : '-', - skill_points_left() >= 0 ? "light_gray" : "red", abs( skill_points ), + skill_points_left() >= 0 ? "light_gray" : "red", std::abs( skill_points ), is_valid() ? "light_gray" : "red", stat_points + trait_points + skill_points ); } else if( limit == ONE_POOL ) { return string_format( _( "Points left: %4d" ), skill_points_left() ); diff --git a/src/avatar.h b/src/avatar.h index 727355832eff6..6c9ec653f72ea 100644 --- a/src/avatar.h +++ b/src/avatar.h @@ -1,6 +1,6 @@ #pragma once -#ifndef AVATAR_H -#define AVATAR_H +#ifndef CATA_SRC_AVATAR_H +#define CATA_SRC_AVATAR_H #include #include @@ -288,4 +288,4 @@ struct points_left { std::string to_string(); }; -#endif +#endif // CATA_SRC_AVATAR_H diff --git a/src/avatar_action.cpp b/src/avatar_action.cpp index 74c292beaa41b..b5d2665fb31cb 100644 --- a/src/avatar_action.cpp +++ b/src/avatar_action.cpp @@ -335,7 +335,7 @@ bool avatar_action::move( avatar &you, map &m, int dx, int dy, int dz ) veh_closed_door = dpart >= 0 && !veh1->parts[dpart].open; } - if( veh0 != nullptr && abs( veh0->velocity ) > 100 ) { + if( veh0 != nullptr && std::abs( veh0->velocity ) > 100 ) { if( veh1 == nullptr ) { if( query_yn( _( "Dive from moving vehicle?" ) ) ) { g->moving_vehicle_dismount( dest_loc ); @@ -619,7 +619,7 @@ void avatar_action::autoattack( avatar &you, map &m ) } ); const tripoint diff = best.pos() - you.pos(); - if( abs( diff.x ) <= 1 && abs( diff.y ) <= 1 && diff.z == 0 ) { + if( std::abs( diff.x ) <= 1 && std::abs( diff.y ) <= 1 && diff.z == 0 ) { move( you, m, tripoint( diff.xy(), 0 ) ); return; } @@ -928,7 +928,6 @@ void avatar_action::aim_do_turn( avatar &you, map &m ) you.moves -= reload_time; - // TODO: add check for TRIGGERHAPPY int shots_fired = you.fire_gun( trajectory.back(), gun.qty, *gun ); // TODO: bionic power cost of firing should be derived from a value of the relevant weapon. @@ -999,7 +998,6 @@ void avatar_action::fire_turret_manual( avatar &you, map &m, turret_data &turret wrefresh( g->w_terrain ); g->draw_panels(); - // TODO: add check for TRIGGERHAPPY turret.fire( you, trajectory.back() ); } g->reenter_fullscreen(); diff --git a/src/avatar_action.h b/src/avatar_action.h index 9267c514d66fa..75c6c4816b8ad 100644 --- a/src/avatar_action.h +++ b/src/avatar_action.h @@ -1,6 +1,6 @@ #pragma once -#ifndef AVATAR_ACTION_H -#define AVATAR_ACTION_H +#ifndef CATA_SRC_AVATAR_ACTION_H +#define CATA_SRC_AVATAR_ACTION_H #include "optional.h" #include "point.h" @@ -77,4 +77,4 @@ void use_item( avatar &you, item_location &loc ); void use_item( avatar &you ); } // namespace avatar_action -#endif // !AVATAR_MOVE_H +#endif // CATA_SRC_AVATAR_ACTION_H diff --git a/src/ballistics.h b/src/ballistics.h index cfd176ac46258..b77ea40ef5c6c 100644 --- a/src/ballistics.h +++ b/src/ballistics.h @@ -1,6 +1,6 @@ #pragma once -#ifndef BALLISTICS_H -#define BALLISTICS_H +#ifndef CATA_SRC_BALLISTICS_H +#define CATA_SRC_BALLISTICS_H class Creature; class dispersion_sources; @@ -34,4 +34,4 @@ dealt_projectile_attack projectile_attack( const projectile &proj_arg, const tri const tripoint &target_arg, const dispersion_sources &dispersion, Creature *origin = nullptr, const vehicle *in_veh = nullptr ); -#endif +#endif // CATA_SRC_BALLISTICS_H diff --git a/src/basecamp.h b/src/basecamp.h index 5b44c2ef1af85..06b28f86930c9 100644 --- a/src/basecamp.h +++ b/src/basecamp.h @@ -1,6 +1,6 @@ #pragma once -#ifndef BASECAMP_H -#define BASECAMP_H +#ifndef CATA_SRC_BASECAMP_H +#define CATA_SRC_BASECAMP_H #include #include @@ -380,4 +380,4 @@ class basecamp_action_components std::unique_ptr map_; // Used for by-radio crafting }; -#endif +#endif // CATA_SRC_BASECAMP_H diff --git a/src/behavior.h b/src/behavior.h index 7bd486b548abc..d6aa2f460ce61 100644 --- a/src/behavior.h +++ b/src/behavior.h @@ -1,6 +1,6 @@ #pragma once -#ifndef BEHAVIOR_H -#define BEHAVIOR_H +#ifndef CATA_SRC_BEHAVIOR_H +#define CATA_SRC_BEHAVIOR_H #include #include @@ -90,4 +90,4 @@ void check_consistency(); } // namespace behavior -#endif +#endif // CATA_SRC_BEHAVIOR_H diff --git a/src/behavior_oracle.h b/src/behavior_oracle.h index e63528b92fd0f..8f35266a64fef 100644 --- a/src/behavior_oracle.h +++ b/src/behavior_oracle.h @@ -1,6 +1,6 @@ #pragma once -#ifndef BEHAVIOR_ORACLE_H -#define BEHAVIOR_ORACLE_H +#ifndef CATA_SRC_BEHAVIOR_ORACLE_H +#define CATA_SRC_BEHAVIOR_ORACLE_H #include #include @@ -49,4 +49,4 @@ class character_oracle_t : public oracle_t extern std::unordered_map> predicate_map; } // namespace behavior -#endif +#endif // CATA_SRC_BEHAVIOR_ORACLE_H diff --git a/src/behavior_strategy.h b/src/behavior_strategy.h index 587367dddb7b8..b1b2ea376d2e1 100644 --- a/src/behavior_strategy.h +++ b/src/behavior_strategy.h @@ -1,6 +1,6 @@ #pragma once -#ifndef BEHAVIOR_STRATEGY_H -#define BEHAVIOR_STRATEGY_H +#ifndef CATA_SRC_BEHAVIOR_STRATEGY_H +#define CATA_SRC_BEHAVIOR_STRATEGY_H #include #include @@ -45,4 +45,4 @@ extern std::unordered_map strategy_map; } // namespace behavior -#endif +#endif // CATA_SRC_BEHAVIOR_STRATEGY_H diff --git a/src/bionics.cpp b/src/bionics.cpp index 9d52031247cba..ef58a6505b2e5 100644 --- a/src/bionics.cpp +++ b/src/bionics.cpp @@ -782,7 +782,7 @@ bool Character::activate_bionic( int b, bool eff_only ) int vehwindspeed = 0; if( optional_vpart_position vp = g->m.veh_at( pos() ) ) { // vehicle velocity in mph - vehwindspeed = abs( vp->vehicle().velocity / 100 ); + vehwindspeed = std::abs( vp->vehicle().velocity / 100 ); } const oter_id &cur_om_ter = overmap_buffer.ter( global_omt_location() ); /* cache g->get_temperature( player location ) since it is used twice. No reason to recalc */ @@ -1095,7 +1095,7 @@ bool Character::burn_fuel( int b, bool start ) const optional_vpart_position vp = g->m.veh_at( pos() ); if( vp ) { // vehicle velocity in mph - vehwindspeed = abs( vp->vehicle().velocity / 100 ); + vehwindspeed = std::abs( vp->vehicle().velocity / 100 ); } const double windpower = get_local_windpower( g->weather.windspeed + vehwindspeed, overmap_buffer.ter( global_omt_location() ), pos(), g->weather.winddirection, @@ -1175,7 +1175,7 @@ void Character::passive_power_gen( int b ) const optional_vpart_position vp = g->m.veh_at( pos() ); if( vp ) { // vehicle velocity in mph - vehwindspeed = abs( vp->vehicle().velocity / 100 ); + vehwindspeed = std::abs( vp->vehicle().velocity / 100 ); } const double windpower = get_local_windpower( g->weather.windspeed + vehwindspeed, overmap_buffer.ter( global_omt_location() ), pos(), g->weather.winddirection, @@ -1553,13 +1553,14 @@ void Character::bionics_uninstall_failure( int difficulty, int success, float ad { // "success" should be passed in as a negative integer representing how far off we // were for a successful removal. We use this to determine consequences for failing. - success = abs( success ); + success = std::abs( success ); // failure level is decided by how far off the character was from a successful removal, and // this is scaled up or down by the ratio of difficulty/skill. At high skill levels (or low // difficulties), only minor consequences occur. At low skill levels, severe consequences // are more likely. - const int failure_level = static_cast( sqrt( success * 4.0 * difficulty / adjusted_skill ) ); + const int failure_level = static_cast( std::sqrt( success * 4.0 * difficulty / + adjusted_skill ) ); const int fail_type = std::min( 5, failure_level ); if( fail_type <= 0 ) { @@ -1617,13 +1618,14 @@ void Character::bionics_uninstall_failure( monster &installer, player &patient, // "success" should be passed in as a negative integer representing how far off we // were for a successful removal. We use this to determine consequences for failing. - success = abs( success ); + success = std::abs( success ); // failure level is decided by how far off the monster was from a successful removal, and // this is scaled up or down by the ratio of difficulty/skill. At high skill levels (or low // difficulties), only minor consequences occur. At low skill levels, severe consequences // are more likely. - const int failure_level = static_cast( sqrt( success * 4.0 * difficulty / adjusted_skill ) ); + const int failure_level = static_cast( std::sqrt( success * 4.0 * difficulty / + adjusted_skill ) ); const int fail_type = std::min( 5, failure_level ); bool u_see = sees( patient ); @@ -1780,7 +1782,7 @@ int bionic_manip_cos( float adjusted_skill, int bionic_difficulty ) // to reserve bionics for characters with the appropriate skill. For more difficult bionics, the // curve flattens out just above 80% chance_of_success = static_cast( ( 100 * skill_difficulty_parameter ) / - ( skill_difficulty_parameter + sqrt( 1 / skill_difficulty_parameter ) ) ); + ( skill_difficulty_parameter + std::sqrt( 1 / skill_difficulty_parameter ) ) ); return chance_of_success; } @@ -2258,13 +2260,13 @@ void Character::bionics_install_failure( const bionic_id &bid, const std::string { // "success" should be passed in as a negative integer representing how far off we // were for a successful install. We use this to determine consequences for failing. - success = abs( success ); + success = std::abs( success ); // failure level is decided by how far off the character was from a successful install, and // this is scaled up or down by the ratio of difficulty/skill. At high skill levels (or low // difficulties), only minor consequences occur. At low skill levels, severe consequences // are more likely. - int failure_level = static_cast( sqrt( success * 4.0 * difficulty / adjusted_skill ) ); + int failure_level = static_cast( std::sqrt( success * 4.0 * difficulty / adjusted_skill ) ); int fail_type = ( failure_level > 5 ? 5 : failure_level ); bool drop_cbm = false; add_msg( m_neutral, _( "The installation is a failure." ) ); diff --git a/src/bionics.h b/src/bionics.h index 8df7196e9e5de..a8fa3425b8ba2 100644 --- a/src/bionics.h +++ b/src/bionics.h @@ -1,6 +1,6 @@ #pragma once -#ifndef BIONICS_H -#define BIONICS_H +#ifndef CATA_SRC_BIONICS_H +#define CATA_SRC_BIONICS_H #include #include @@ -213,4 +213,4 @@ int bionic_manip_cos( float adjusted_skill, int bionic_difficulty ); std::vector bionics_cancelling_trait( const std::vector &bios, const trait_id &tid ); -#endif +#endif // CATA_SRC_BIONICS_H diff --git a/src/bodypart.h b/src/bodypart.h index 897df0af49c8e..38035fc0b14a8 100644 --- a/src/bodypart.h +++ b/src/bodypart.h @@ -1,6 +1,6 @@ #pragma once -#ifndef BODYPART_H -#define BODYPART_H +#ifndef CATA_SRC_BODYPART_H +#define CATA_SRC_BODYPART_H #include #include @@ -238,4 +238,4 @@ std::string get_body_part_id( body_part bp ); /** Returns the matching body_part token from the corresponding body_part string. */ body_part get_body_part_token( const std::string &id ); -#endif +#endif // CATA_SRC_BODYPART_H diff --git a/src/bonuses.h b/src/bonuses.h index 6202677db50fc..45a493b9f05d9 100644 --- a/src/bonuses.h +++ b/src/bonuses.h @@ -1,6 +1,6 @@ #pragma once -#ifndef BONUSES_H -#define BONUSES_H +#ifndef CATA_SRC_BONUSES_H +#define CATA_SRC_BONUSES_H #include #include @@ -89,4 +89,4 @@ class bonus_container bonus_map bonuses_mult; }; -#endif +#endif // CATA_SRC_BONUSES_H diff --git a/src/calendar.cpp b/src/calendar.cpp index a4be596d497dd..0487a74ae3b5b 100644 --- a/src/calendar.cpp +++ b/src/calendar.cpp @@ -68,7 +68,7 @@ moon_phase get_moon_phase( const time_point &p ) const int num_middays = to_days( p - calendar::turn_zero + 1_days / 2 ); const time_duration nearest_midnight = num_middays * 1_days; const double phase_change = nearest_midnight / moon_phase_duration; - const int current_phase = static_cast( round( phase_change * MOON_PHASE_MAX ) ) % + const int current_phase = static_cast( std::round( phase_change * MOON_PHASE_MAX ) ) % static_cast( MOON_PHASE_MAX ); return static_cast( current_phase ); } diff --git a/src/calendar.h b/src/calendar.h index 40e6a01ce8f10..9221563618531 100644 --- a/src/calendar.h +++ b/src/calendar.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CALENDAR_H -#define CALENDAR_H +#ifndef CATA_SRC_CALENDAR_H +#define CATA_SRC_CALENDAR_H #include #include @@ -567,4 +567,4 @@ enum class weekdays : int { weekdays day_of_week( const time_point &p ); -#endif +#endif // CATA_SRC_CALENDAR_H diff --git a/src/cata_algo.h b/src/cata_algo.h index 2987c03c7106b..0bcf8c13a0e29 100644 --- a/src/cata_algo.h +++ b/src/cata_algo.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CATA_ALGO_H -#define CATA_ALGO_H +#ifndef CATA_SRC_CATA_ALGO_H +#define CATA_SRC_CATA_ALGO_H #include #include @@ -122,4 +122,4 @@ std::vector> find_cycles( const std::unordered_map #include @@ -468,4 +468,4 @@ class JsonArrayOutputArchive } // namespace io -#endif +#endif // CATA_SRC_CATA_IO_H diff --git a/src/cata_tiles.cpp b/src/cata_tiles.cpp index b57c6f92902d1..dbbff49c8c372 100644 --- a/src/cata_tiles.cpp +++ b/src/cata_tiles.cpp @@ -1441,11 +1441,11 @@ void cata_tiles::get_window_tile_counts( const int width, const int height, int int &rows ) const { if( tile_iso ) { - columns = ceil( static_cast( width ) / tile_width ) * 2 + 4; - rows = ceil( static_cast( height ) / ( tile_width / 2.0 - 1 ) ) * 2 + 4; + columns = std::ceil( static_cast( width ) / tile_width ) * 2 + 4; + rows = std::ceil( static_cast( height ) / ( tile_width / 2.0 - 1 ) ) * 2 + 4; } else { - columns = ceil( static_cast( width ) / tile_width ); - rows = ceil( static_cast( height ) / tile_height ); + columns = std::ceil( static_cast( width ) / tile_width ); + rows = std::ceil( static_cast( height ) / tile_height ); } } diff --git a/src/cata_tiles.h b/src/cata_tiles.h index 8390b5482bcb4..800daabb1582a 100644 --- a/src/cata_tiles.h +++ b/src/cata_tiles.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CATA_TILES_H -#define CATA_TILES_H +#ifndef CATA_SRC_CATA_TILES_H +#define CATA_SRC_CATA_TILES_H #include #include @@ -582,4 +582,4 @@ class cata_tiles std::string memory_map_mode = "color_pixel_sepia"; }; -#endif +#endif // CATA_SRC_CATA_TILES_H diff --git a/src/cata_utility.cpp b/src/cata_utility.cpp index fde075f31f2ee..a7bb87fe2445b 100644 --- a/src/cata_utility.cpp +++ b/src/cata_utility.cpp @@ -126,7 +126,7 @@ bool match_include_exclude( const std::string &text, std::string filter ) double logarithmic( double t ) { - return 1 / ( 1 + exp( -t ) ); + return 1 / ( 1 + std::exp( -t ) ); } double logarithmic_range( int min, int max, int pos ) diff --git a/src/cata_utility.h b/src/cata_utility.h index 103934f3ef346..8a3005f70c84a 100644 --- a/src/cata_utility.h +++ b/src/cata_utility.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CATA_UTILITY_H -#define CATA_UTILITY_H +#ifndef CATA_SRC_CATA_UTILITY_H +#define CATA_SRC_CATA_UTILITY_H #include #include @@ -529,4 +529,4 @@ class on_out_of_scope } }; -#endif // CAT_UTILITY_H +#endif // CATA_SRC_CATA_UTILITY_H diff --git a/src/cata_variant.h b/src/cata_variant.h index f8f634829b056..a0b6f86f97ab5 100644 --- a/src/cata_variant.h +++ b/src/cata_variant.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CATA_VARIANT_H -#define CATA_VARIANT_H +#ifndef CATA_SRC_CATA_VARIANT_H +#define CATA_SRC_CATA_VARIANT_H #include #include @@ -349,4 +349,4 @@ struct hash { } // namespace std -#endif // CATA_VARIANT_H +#endif // CATA_SRC_CATA_VARIANT_H diff --git a/src/catacharset.h b/src/catacharset.h index d2c2c0aceb6e6..f9e16d715c5cb 100644 --- a/src/catacharset.h +++ b/src/catacharset.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CATACHARSET_H -#define CATACHARSET_H +#ifndef CATA_SRC_CATACHARSET_H +#define CATA_SRC_CATACHARSET_H #include #include @@ -176,4 +176,4 @@ class utf8_wrapper void init_utf8_wrapper(); }; -#endif +#endif // CATA_SRC_CATACHARSET_H diff --git a/src/cellular_automata.h b/src/cellular_automata.h index da8f0bab14ce4..15b65cf30c0ca 100644 --- a/src/cellular_automata.h +++ b/src/cellular_automata.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CELLULAR_AUTOMATA_H -#define CELLULAR_AUTOMATA_H +#ifndef CATA_SRC_CELLULAR_AUTOMATA_H +#define CATA_SRC_CELLULAR_AUTOMATA_H #include @@ -107,4 +107,4 @@ inline std::vector> generate_cellular_automaton( const int widt } } // namespace CellularAutomata -#endif +#endif // CATA_SRC_CELLULAR_AUTOMATA_H diff --git a/src/char_validity_check.h b/src/char_validity_check.h index b2b4bf652a76d..c43d04f970d0b 100644 --- a/src/char_validity_check.h +++ b/src/char_validity_check.h @@ -1,7 +1,7 @@ #pragma once -#ifndef CHAR_VALIDITY_CHECK_H -#define CHAR_VALIDITY_CHECK_H +#ifndef CATA_SRC_CHAR_VALIDITY_CHECK_H +#define CATA_SRC_CHAR_VALIDITY_CHECK_H bool is_char_allowed( int ch ); -#endif +#endif // CATA_SRC_CHAR_VALIDITY_CHECK_H diff --git a/src/character.cpp b/src/character.cpp index 67ac173ba67bc..f89f747ec67f0 100644 --- a/src/character.cpp +++ b/src/character.cpp @@ -685,11 +685,9 @@ int Character::sight_range( int light_level ) const * log(LIGHT_AMBIENT_LOW / light_level) <= LIGHT_TRANSPARENCY_OPEN_AIR * distance * log(LIGHT_AMBIENT_LOW / light_level) * (1 / LIGHT_TRANSPARENCY_OPEN_AIR) <= distance */ - int range = static_cast( -log( get_vision_threshold( static_cast( g->m.ambient_light_at( - pos() ) ) ) / - static_cast( light_level ) ) * + int range = static_cast( -std::log( get_vision_threshold( static_cast + ( g->m.ambient_light_at( pos() ) ) ) / static_cast( light_level ) ) * ( 1.0 / LIGHT_TRANSPARENCY_OPEN_AIR ) ); - // int range = log(light_level * LIGHT_AMBIENT_LOW) / LIGHT_TRANSPARENCY_OPEN_AIR; // Clamp to [1, sight_max]. return clamp( range, 1, sight_max ); @@ -1687,7 +1685,7 @@ void Character::recalc_sight_limits() static float threshold_for_range( float range ) { constexpr float epsilon = 0.01f; - return LIGHT_AMBIENT_MINIMAL / exp( range * LIGHT_TRANSPARENCY_OPEN_AIR ) - epsilon; + return LIGHT_AMBIENT_MINIMAL / std::exp( range * LIGHT_TRANSPARENCY_OPEN_AIR ) - epsilon; } float Character::get_vision_threshold( float light_level ) const @@ -2616,8 +2614,8 @@ units::mass Character::weight_carried_with_tweaks( const item_tweaks &tweaks ) c } // Exclude wielded item if using lifting tool if( weaponweight + ret > weight_capacity() ) { - const float liftrequirement = ceil( units::to_gram( weaponweight ) / units::to_gram - ( TOOL_LIFT_FACTOR ) ); + const float liftrequirement = std::ceil( units::to_gram( weaponweight ) / + units::to_gram( TOOL_LIFT_FACTOR ) ); if( g->new_game || best_nearby_lifting_assist() < liftrequirement ) { ret += weaponweight; } @@ -3010,7 +3008,7 @@ std::vector Character::get_overlay_ids() const } // then get mutations - for( const auto &mut : my_mutations ) { + for( const std::pair &mut : my_mutations ) { overlay_id = ( mut.second.powered ? "active_" : "" ) + mut.first.str(); order = get_overlay_order_of_mutation( overlay_id ); mutation_sorting.insert( std::pair( order, overlay_id ) ); @@ -3745,14 +3743,14 @@ int Character::encumb( body_part bp ) const } static void apply_mut_encumbrance( std::array &vals, - const mutation_branch &mut, + const trait_id &mut, const body_part_set &oversize ) { - for( const auto &enc : mut.encumbrance_always ) { + for( const std::pair &enc : mut->encumbrance_always ) { vals[enc.first].encumbrance += enc.second; } - for( const auto &enc : mut.encumbrance_covered ) { + for( const std::pair &enc : mut->encumbrance_covered ) { if( !oversize.test( enc.first ) ) { vals[enc.first].encumbrance += enc.second; } @@ -3777,8 +3775,8 @@ void Character::mut_cbm_encumb( std::array &vals ) con // Lower penalty for bps covered only by XL armor const auto oversize = exclusive_flag_coverage( flag_OVERSIZE ); - for( const auto &mut_pair : my_mutations ) { - apply_mut_encumbrance( vals, *mut_pair.first, oversize ); + for( const trait_id &mut : get_mutations() ) { + apply_mut_encumbrance( vals, mut, oversize ); } } @@ -4454,7 +4452,7 @@ void Character::update_health( int external_modifiers ) // For small differences, it changes 4 points per day // For large ones, up to ~40% of the difference per day int health_change = effective_healthy_mod - get_healthy() + external_modifiers; - mod_healthy( sgn( health_change ) * std::max( 1, abs( health_change ) / 10 ) ); + mod_healthy( sgn( health_change ) * std::max( 1, std::abs( health_change ) / 10 ) ); // And healthy_mod decays over time. // Slowly near 0, but it's hard to overpower it near +/-100 @@ -5133,7 +5131,7 @@ void Character::update_bodytemp() int vehwindspeed = 0; const optional_vpart_position vp = g->m.veh_at( pos() ); if( vp ) { - vehwindspeed = abs( vp->vehicle().velocity / 100 ); // vehicle velocity in mph + vehwindspeed = std::abs( vp->vehicle().velocity / 100 ); // vehicle velocity in mph } const oter_id &cur_om_ter = overmap_buffer.ter( global_omt_location() ); bool sheltered = g->is_sheltered( pos() ); @@ -5247,8 +5245,8 @@ void Character::update_bodytemp() frostbite_timer[bp] -= std::max( 5, h_radiation ); } // 111F (44C) is a temperature in which proteins break down: https://en.wikipedia.org/wiki/Burn - blister_count += h_radiation - 111 > 0 ? std::max( static_cast( sqrt( h_radiation - 111 ) ), - 0 ) : 0; + blister_count += h_radiation - 111 > 0 ? + std::max( static_cast( std::sqrt( h_radiation - 111 ) ), 0 ) : 0; const bool pyromania = has_trait( trait_PYROMANIA ); // BLISTERS : Skin gets blisters from intense heat exposure. @@ -5414,7 +5412,8 @@ void Character::update_bodytemp() rounding_error = 1; } if( temp_cur[bp] != temp_conv[bp] ) { - temp_cur[bp] = static_cast( temp_difference * exp( -0.002 ) + temp_conv[bp] + rounding_error ); + temp_cur[bp] = static_cast( temp_difference * std::exp( -0.002 ) + temp_conv[bp] + + rounding_error ); } // This statement checks if we should be wearing our bonus warmth. // If, after all the warmth calculations, we should be, then we have to recalculate the temperature. @@ -5428,7 +5427,8 @@ void Character::update_bodytemp() } if( temp_before != temp_conv[bp] ) { temp_difference = temp_before - temp_conv[bp]; - temp_cur[bp] = static_cast( temp_difference * exp( -0.002 ) + temp_conv[bp] + rounding_error ); + temp_cur[bp] = static_cast( temp_difference * std::exp( -0.002 ) + temp_conv[bp] + + rounding_error ); } } int temp_after = temp_cur[bp]; @@ -6337,7 +6337,7 @@ float Character::active_light() const lumination = static_cast( maxlum ); float mut_lum = 0.0f; - for( const auto &mut : my_mutations ) { + for( const std::pair &mut : my_mutations ) { if( mut.second.powered ) { float curr_lum = 0.0f; for( const auto elem : mut.first->lumination ) { @@ -6442,8 +6442,8 @@ bool Character::pour_into( vehicle &veh, item &liquid ) resistances Character::mutation_armor( body_part bp ) const { resistances res; - for( auto &iter : my_mutations ) { - res += iter.first->damage_resistance( bp ); + for( const trait_id &iter : get_mutations() ) { + res += iter->damage_resistance( bp ); } return res; @@ -6874,7 +6874,7 @@ std::string Character::get_weight_description() const units::mass Character::bodyweight() const { - return units::from_kilogram( get_bmi() * pow( height() / 100.0f, 2 ) ); + return units::from_kilogram( get_bmi() * std::pow( height() / 100.0f, 2 ) ); } units::mass Character::bionics_weight() const @@ -6899,6 +6899,11 @@ int Character::base_age() const return init_age; } +void Character::set_base_age( int age ) +{ + init_age = age; +} + void Character::mod_base_age( int mod ) { init_age += mod; @@ -6923,6 +6928,11 @@ int Character::base_height() const return init_height; } +void Character::set_base_height( int height ) +{ + init_height = height; +} + void Character::mod_base_height( int mod ) { init_height += mod; @@ -6945,28 +6955,21 @@ std::string Character::height_string() const int Character::height() const { - int height = init_height; - int height_pos = 15; - - const static std::array v = {{ 290, 240, 190, 140, 90 }}; - for( const int up_bound : v ) { - if( up_bound >= init_height && up_bound - init_height < 40 ) { - height_pos = up_bound - init_height; - } + switch( get_size() ) { + case MS_TINY: + return init_height - 100; + case MS_SMALL: + return init_height - 50; + case MS_MEDIUM: + return init_height; + case MS_LARGE: + return init_height + 50; + case MS_HUGE: + return init_height + 100; } - if( get_size() == MS_TINY ) { - height = 90 - height_pos; - } else if( get_size() == MS_SMALL ) { - height = 140 - height_pos; - } else if( get_size() == MS_LARGE ) { - height = 240 - height_pos; - } else if( get_size() == MS_HUGE ) { - height = 290 - height_pos; - } - - // TODO: Make this a player creation option - return height; + debugmsg( "Invalid size class" ); + abort(); } int Character::get_bmr() const @@ -6975,9 +6978,9 @@ int Character::get_bmr() const Values are for males, and average! */ const int equation_constant = 5; - return ceil( metabolic_rate_base() * activity_level * ( units::to_gram - ( bodyweight() / 100.0 ) + - ( 6.25 * height() ) - ( 5 * age() ) + equation_constant ) ); + return std::ceil( metabolic_rate_base() * activity_level * ( units::to_gram + ( bodyweight() / 100.0 ) + + ( 6.25 * height() ) - ( 5 * age() ) + equation_constant ) ); } void Character::increase_activity_level( float new_level ) @@ -7849,10 +7852,10 @@ void Character::set_highest_cat_level() mutation_category_level.clear(); // For each of our mutations... - for( const std::pair &mut : my_mutations ) { + for( const trait_id &mut : get_mutations() ) { // ...build up a map of all prerequisite/replacement mutations along the tree, along with their distance from the current mutation std::unordered_map dependency_map; - build_mut_dependency_map( mut.first, dependency_map, 0 ); + build_mut_dependency_map( mut, dependency_map, 0 ); // Then use the map to set the category levels for( const std::pair &i : dependency_map ) { @@ -7874,8 +7877,8 @@ void Character::drench_mut_calc() int neutral = 0; int good = 0; - for( const auto &iter : my_mutations ) { - const mutation_branch &mdata = iter.first.obj(); + for( const trait_id &iter : get_mutations() ) { + const mutation_branch &mdata = iter.obj(); const auto wp_iter = mdata.protection.find( bp ); if( wp_iter != mdata.protection.end() ) { ignored += wp_iter->second.x; @@ -8389,8 +8392,8 @@ void Character::on_hurt( Creature *source, bool disturb /*= true*/ ) bool Character::crossed_threshold() const { - for( const std::pair &mut : my_mutations ) { - if( mut.first->threshold ) { + for( const trait_id &mut : get_mutations() ) { + if( mut->threshold ) { return true; } } @@ -8731,7 +8734,7 @@ void Character::apply_persistent_morale() } // The penalty starts at 1 at min_time and scales up to max_unhappiness at max_time. const float t = ( total_time - min_time ) / ( max_time - min_time ); - const int pen = ceil( lerp_clamped( 0, max_unhappiness, t ) ); + const int pen = std::ceil( lerp_clamped( 0, max_unhappiness, t ) ); if( pen > 0 ) { add_morale( MORALE_PERM_NOMAD, -pen, -pen, 1_minutes, 1_minutes, true ); } @@ -8791,16 +8794,17 @@ void Character::check_and_recover_morale() { player_morale test_morale; - for( const auto &wit : worn ) { + for( const item &wit : worn ) { test_morale.on_item_wear( wit ); } - for( const auto &mut : my_mutations ) { - test_morale.on_mutation_gain( mut.first ); + for( const trait_id &mut : get_mutations() ) { + test_morale.on_mutation_gain( mut ); } - for( auto &elem : *effects ) { - for( auto &_effect_it : elem.second ) { + for( std::pair>> &elem : + *effects ) { + for( std::pair &_effect_it : elem.second ) { const effect &e = _effect_it.second; test_morale.on_effect_int_change( e.get_id(), e.get_intensity(), e.get_bp() ); } @@ -9162,9 +9166,8 @@ int Character::floor_warmth( const tripoint &pos ) const int Character::bodytemp_modifier_traits( bool overheated ) const { int mod = 0; - for( auto &iter : my_mutations ) { - mod += overheated ? iter.first->bodytemp_min : - iter.first->bodytemp_max; + for( const trait_id &iter : get_mutations() ) { + mod += overheated ? iter->bodytemp_min : iter->bodytemp_max; } return mod; } @@ -9172,8 +9175,8 @@ int Character::bodytemp_modifier_traits( bool overheated ) const int Character::bodytemp_modifier_traits_floor() const { int mod = 0; - for( auto &iter : my_mutations ) { - mod += iter.first->bodytemp_sleep; + for( const trait_id &iter : get_mutations() ) { + mod += iter->bodytemp_sleep; } return mod; } @@ -9294,7 +9297,7 @@ std::list Character::use_charges( const itype_id &what, int qty, qty -= std::min( qty, bio ); } - int adv = charges_of( "adv_UPS_off", static_cast( ceil( qty * 0.6 ) ) ); + int adv = charges_of( "adv_UPS_off", static_cast( std::ceil( qty * 0.6 ) ) ); if( adv > 0 ) { std::list found = use_charges( "adv_UPS_off", adv ); res.splice( res.end(), found ); @@ -9500,7 +9503,7 @@ int Character::heartrate_bpm() const //Based on get_max_healthy that already has bmi factored const int healthy = get_max_healthy(); //a bit arbitary formula that can use some love - float healthy_modifier = -0.05f * round( healthy / 20.0f ); + float healthy_modifier = -0.05f * std::round( healthy / 20.0f ); heartbeat += average_heartbeat * healthy_modifier; //Pain simply adds 2% per point after it reaches 5 (that's arbitary) const int cur_pain = get_perceived_pain(); diff --git a/src/character.h b/src/character.h index f000620ac385d..1c3d4362ba98a 100644 --- a/src/character.h +++ b/src/character.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CHARACTER_H -#define CHARACTER_H +#ifndef CATA_SRC_CHARACTER_H +#define CATA_SRC_CHARACTER_H #include #include @@ -654,10 +654,10 @@ class Character : public Creature, public visitable trait_id trait_by_invlet( int ch ) const; /** Toggles a trait on the player and in their mutation list */ - void toggle_trait( const trait_id &flag ); + void toggle_trait( const trait_id & ); /** Add or removes a mutation on the player, but does not trigger mutation loss/gain effects. */ - void set_mutation( const trait_id &flag ); - void unset_mutation( const trait_id &flag ); + void set_mutation( const trait_id & ); + void unset_mutation( const trait_id & ); // Trigger and disable mutations that can be so toggled. void activate_mutation( const trait_id &mutation ); @@ -1449,8 +1449,8 @@ class Character : public Creature, public visitable const std::bitset &get_vision_modes() const { return vision_mode_cache; } - /** Empties the trait list */ - void empty_traits(); + /** Empties the trait and mutations lists */ + void clear_mutations(); /** * Adds mandatory scenario and profession traits unless you already have them * And if you do already have them, refunds the points for the trait @@ -1583,12 +1583,14 @@ class Character : public Creature, public visitable void reset_chargen_attributes(); // age in years, determined at character creation int base_age() const; + void set_base_age( int age ); void mod_base_age( int mod ); // age in years int age() const; std::string age_string() const; // returns the height in cm int base_height() const; + void set_base_height( int height ); void mod_base_height( int mod ); std::string height_string() const; // returns the height of the player character in cm @@ -2075,4 +2077,4 @@ struct enum_traits { }; /**Get translated name of a stat*/ std::string get_stat_name( Character::stat Stat ); -#endif +#endif // CATA_SRC_CHARACTER_H diff --git a/src/character_id.h b/src/character_id.h index c5a5083a69708..cf35519de073d 100644 --- a/src/character_id.h +++ b/src/character_id.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CATA_CHARACTER_ID_H -#define CATA_CHARACTER_ID_H +#ifndef CATA_SRC_CHARACTER_ID_H +#define CATA_SRC_CHARACTER_ID_H #include #include @@ -55,4 +55,4 @@ inline std::ostream &operator<<( std::ostream &o, character_id id ) return o << id.get_value(); } -#endif // CATA_CHARACTER_ID_H +#endif // CATA_SRC_CHARACTER_ID_H diff --git a/src/character_martial_arts.h b/src/character_martial_arts.h index e835e51251e7e..7ba9dbd213d27 100644 --- a/src/character_martial_arts.h +++ b/src/character_martial_arts.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CHARACTER_MARTIAL_ARTS_H -#define CHARACTER_MARTIAL_ARTS_H +#ifndef CATA_SRC_CHARACTER_MARTIAL_ARTS_H +#define CATA_SRC_CHARACTER_MARTIAL_ARTS_H #include #include @@ -104,4 +104,4 @@ class character_martial_arts std::string selected_style_name( const Character &owner ) const; }; -#endif // !CHARACTER_MARTIAL_ARTS_H +#endif // CATA_SRC_CHARACTER_MARTIAL_ARTS_H diff --git a/src/clone_ptr.h b/src/clone_ptr.h index 34a9d7eef64db..d042c5c3c6c7b 100644 --- a/src/clone_ptr.h +++ b/src/clone_ptr.h @@ -1,5 +1,5 @@ -#ifndef CATA_CLONE_PTR_H -#define CATA_CLONE_PTR_H +#ifndef CATA_SRC_CLONE_PTR_H +#define CATA_SRC_CLONE_PTR_H #include @@ -62,4 +62,4 @@ class clone_ptr } // namespace cata -#endif // CATA_CLONE_PTR_H +#endif // CATA_SRC_CLONE_PTR_H diff --git a/src/clothing_mod.h b/src/clothing_mod.h index 577712d240b0c..39c1fa1f2592c 100644 --- a/src/clothing_mod.h +++ b/src/clothing_mod.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CLOTHING_MOD_H -#define CLOTHING_MOD_H +#ifndef CATA_SRC_CLOTHING_MOD_H +#define CATA_SRC_CLOTHING_MOD_H #include #include @@ -82,4 +82,4 @@ std::string string_from_clothing_mod_type( clothing_mod_type type ); } // namespace clothing_mods -#endif +#endif // CATA_SRC_CLOTHING_MOD_H diff --git a/src/clzones.h b/src/clzones.h index 27c89c88a5504..2ca66fd5166dc 100644 --- a/src/clzones.h +++ b/src/clzones.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CLZONES_H -#define CLZONES_H +#ifndef CATA_SRC_CLZONES_H +#define CATA_SRC_CLZONES_H #include #include @@ -439,4 +439,4 @@ class zone_manager void deserialize( JsonIn &jsin ); }; -#endif +#endif // CATA_SRC_CLZONES_H diff --git a/src/colony.h b/src/colony.h index ac42e79e04497..f335258958c0d 100644 --- a/src/colony.h +++ b/src/colony.h @@ -21,8 +21,8 @@ // 3. This notice may not be removed or altered from any source distribution. #pragma once -#ifndef COLONY_H -#define COLONY_H +#ifndef CATA_SRC_COLONY_H +#define CATA_SRC_COLONY_H // Compiler-specific defines used by colony: #define COLONY_CONSTEXPR @@ -3514,4 +3514,4 @@ inline void swap( colony #include @@ -504,4 +504,4 @@ std::string get_note_string_from_color( const nc_color &color ); nc_color get_note_color( const std::string ¬e_id ); std::list> get_note_color_names(); -#endif +#endif // CATA_SRC_COLOR_H diff --git a/src/color_loader.h b/src/color_loader.h index 9099f6b9ab59e..9ab9530a793c7 100644 --- a/src/color_loader.h +++ b/src/color_loader.h @@ -1,6 +1,6 @@ #pragma once -#ifndef COLOR_LOADER_H -#define COLOR_LOADER_H +#ifndef CATA_SRC_COLOR_LOADER_H +#define CATA_SRC_COLOR_LOADER_H #include #include @@ -83,4 +83,4 @@ class color_loader } }; -#endif +#endif // CATA_SRC_COLOR_LOADER_H diff --git a/src/common_types.h b/src/common_types.h index f57a57bd0592d..3b1c0fadc2ba1 100644 --- a/src/common_types.h +++ b/src/common_types.h @@ -1,6 +1,6 @@ #pragma once -#ifndef COMMON_TYPES_H -#define COMMON_TYPES_H +#ifndef CATA_SRC_COMMON_TYPES_H +#define CATA_SRC_COMMON_TYPES_H #include #include @@ -46,4 +46,4 @@ struct numeric_interval { } }; -#endif // COMMON_TYPES_Hs +#endif // CATA_SRC_COMMON_TYPES_H diff --git a/src/compatibility.h b/src/compatibility.h index bbc6bac12cb6a..df641bfb9e1ab 100644 --- a/src/compatibility.h +++ b/src/compatibility.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CATA_COMPATIBILITY_H -#define CATA_COMPATIBILITY_H +#ifndef CATA_SRC_COMPATIBILITY_H +#define CATA_SRC_COMPATIBILITY_H //-------------------------------------------------------------------------------------------------- // HACK: @@ -135,4 +135,4 @@ inline void std::advance( I iter, int num ) } #endif //CATA_NO_ADVANCE -#endif //CATA_COMPATIBILITY_H +#endif // CATA_SRC_COMPATIBILITY_H diff --git a/src/computer.h b/src/computer.h index 59a92f598b941..109fed3349c80 100644 --- a/src/computer.h +++ b/src/computer.h @@ -1,6 +1,6 @@ #pragma once -#ifndef COMPUTER_H -#define COMPUTER_H +#ifndef CATA_SRC_COMPUTER_H +#define CATA_SRC_COMPUTER_H #include #include @@ -148,4 +148,4 @@ class computer void remove_option( computer_action action ); }; -#endif +#endif // CATA_SRC_COMPUTER_H diff --git a/src/computer_session.cpp b/src/computer_session.cpp index 842a4df75832c..a7401c0498144 100644 --- a/src/computer_session.cpp +++ b/src/computer_session.cpp @@ -649,7 +649,7 @@ void computer_session::action_amigara_log() reset_terminal(); print_line( _( "SITE %d%d%d\n" "PERTINENT FOREMAN LOGS WILL BE PREPENDED TO NOTES" ), - g->get_levx(), g->get_levy(), abs( g->get_levz() ) ); + g->get_levx(), g->get_levy(), std::abs( g->get_levz() ) ); print_text( "%s", SNIPPET.random_from_category( "amigara4" ).value_or( translation() ) ); print_gibberish_line(); print_gibberish_line(); diff --git a/src/computer_session.h b/src/computer_session.h index a12eac97e3c7f..ac12ae5a6e517 100644 --- a/src/computer_session.h +++ b/src/computer_session.h @@ -1,6 +1,6 @@ #pragma once -#ifndef COMPUTER_SESSION_H -#define COMPUTER_SESSION_H +#ifndef CATA_SRC_COMPUTER_SESSION_H +#define CATA_SRC_COMPUTER_SESSION_H #include #include @@ -142,4 +142,4 @@ class computer_session computer_failure_functions; }; -#endif +#endif // CATA_SRC_COMPUTER_SESSION_H diff --git a/src/condition.h b/src/condition.h index c965380dc8fe4..baa2b77058eef 100644 --- a/src/condition.h +++ b/src/condition.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CONDITION_H -#define CONDITION_H +#ifndef CATA_SRC_CONDITION_H +#define CATA_SRC_CONDITION_H #include #include @@ -152,4 +152,4 @@ extern template void read_condition( const JsonO std::function &condition, bool default_val ); #endif -#endif +#endif // CATA_SRC_CONDITION_H diff --git a/src/construction.h b/src/construction.h index 62da0ed1a8fe8..bb76af1d0141a 100644 --- a/src/construction.h +++ b/src/construction.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CONSTRUCTION_H -#define CONSTRUCTION_H +#ifndef CATA_SRC_CONSTRUCTION_H +#define CATA_SRC_CONSTRUCTION_H #include #include @@ -126,4 +126,4 @@ void finalize_constructions(); void get_build_reqs_for_furn_ter_ids( const std::pair, std::map> &changed_ids, build_reqs &total_reqs ); -#endif +#endif // CATA_SRC_CONSTRUCTION_H diff --git a/src/construction_category.h b/src/construction_category.h index d5d4c194d76df..fcd45d6afe57a 100644 --- a/src/construction_category.h +++ b/src/construction_category.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CONSTRUCTION_CATEGORY_H -#define CONSTRUCTION_CATEGORY_H +#ifndef CATA_SRC_CONSTRUCTION_CATEGORY_H +#define CATA_SRC_CONSTRUCTION_CATEGORY_H #include #include @@ -36,4 +36,4 @@ const std::vector &get_all(); } // namespace construction_categories -#endif +#endif // CATA_SRC_CONSTRUCTION_CATEGORY_H diff --git a/src/consumption.cpp b/src/consumption.cpp index 9db22866c425e..0921b6080e723 100644 --- a/src/consumption.cpp +++ b/src/consumption.cpp @@ -496,7 +496,7 @@ std::pair Character::fun_for( const item &comest ) const } if( has_active_bionic( bio_taste_blocker ) && - get_power_level() > units::from_kilojoule( abs( comest.get_comestible_fun() ) ) && + get_power_level() > units::from_kilojoule( std::abs( comest.get_comestible_fun() ) ) && fun < 0 ) { fun = 0; } @@ -1033,7 +1033,7 @@ void Character::modify_stimulation( const islot_comestible &comest ) { const int current_stim = get_stim(); if( comest.stim != 0 && - ( abs( current_stim ) < ( abs( comest.stim ) * 3 ) || + ( std::abs( current_stim ) < ( std::abs( comest.stim ) * 3 ) || sgn( current_stim ) != sgn( comest.stim ) ) ) { if( comest.stim < 0 ) { set_stim( std::max( comest.stim * 3, current_stim + comest.stim ) ); diff --git a/src/coordinate_conversions.h b/src/coordinate_conversions.h index 472fa8823a6cc..33d8061aa35b7 100644 --- a/src/coordinate_conversions.h +++ b/src/coordinate_conversions.h @@ -1,6 +1,6 @@ #pragma once -#ifndef COORDINATE_CONVERSIONS_H -#define COORDINATE_CONVERSIONS_H +#ifndef CATA_SRC_COORDINATE_CONVERSIONS_H +#define CATA_SRC_COORDINATE_CONVERSIONS_H #include "point.h" @@ -225,4 +225,4 @@ inline point ms_to_omt_remain( point &p ) // overmap terrain to map segment. tripoint omt_to_seg_copy( const tripoint &p ); -#endif +#endif // CATA_SRC_COORDINATE_CONVERSIONS_H diff --git a/src/coordinates.h b/src/coordinates.h index 9122fc6572f27..b8f09429a6ce4 100644 --- a/src/coordinates.h +++ b/src/coordinates.h @@ -1,6 +1,6 @@ #pragma once -#ifndef COORDINATES_H -#define COORDINATES_H +#ifndef CATA_SRC_COORDINATES_H +#define CATA_SRC_COORDINATES_H #include @@ -94,4 +94,4 @@ struct real_coords { return point( abs_om.x * subs_in_om * tiles_in_sub, abs_om.y * subs_in_om * tiles_in_sub ); } }; -#endif +#endif // CATA_SRC_COORDINATES_H diff --git a/src/craft_command.cpp b/src/craft_command.cpp index e0a2e75205b07..6d83371116554 100644 --- a/src/craft_command.cpp +++ b/src/craft_command.cpp @@ -292,7 +292,7 @@ std::vector> craft_command::check_item_components_miss for( const auto &item_sel : item_selections ) { itype_id type = item_sel.comp.type; const item_comp component = item_sel.comp; - const int count = component.count > 0 ? component.count * batch_size : abs( component.count ); + const int count = component.count > 0 ? component.count * batch_size : std::abs( component.count ); if( item::count_by_charges( type ) && count > 0 ) { switch( item_sel.use_from ) { diff --git a/src/craft_command.h b/src/craft_command.h index 3b29189f076f6..17f345394dd3c 100644 --- a/src/craft_command.h +++ b/src/craft_command.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CRAFT_COMMAND_H -#define CRAFT_COMMAND_H +#ifndef CATA_SRC_CRAFT_COMMAND_H +#define CATA_SRC_CRAFT_COMMAND_H #include #include @@ -118,4 +118,4 @@ class craft_command const std::vector> &missing_tools ); }; -#endif +#endif // CATA_SRC_CRAFT_COMMAND_H diff --git a/src/crafting.cpp b/src/crafting.cpp index c4d64ac1d87de..4432bc1c53bc4 100644 --- a/src/crafting.cpp +++ b/src/crafting.cpp @@ -919,8 +919,8 @@ double player::crafting_success_roll( const recipe &making ) const // It's tough to craft with paws. Fortunately it's just a matter of grip and fine-motor, // not inability to see what you're doing - for( const std::pair &mut : my_mutations ) { - for( const std::pair &skib : mut.first->craft_skill_bonus ) { + for( const trait_id &mut : get_mutations() ) { + for( const std::pair &skib : mut->craft_skill_bonus ) { if( making.skill_used == skib.first ) { skill_dice += skib.second; } @@ -1122,7 +1122,7 @@ void player::complete_craft( item &craft, const tripoint &loc ) const double learning_speed = std::max( get_skill_level( making.skill_used ), 1 ) * std::max( get_int(), 1 ); - const double time_to_learn = 1000 * 8 * pow( difficulty, 4 ) / learning_speed; + const double time_to_learn = 1000 * 8 * std::pow( difficulty, 4 ) / learning_speed; if( x_in_y( making.time, time_to_learn ) ) { learn_recipe( &making ); add_msg( m_good, _( "You memorized the recipe for %s!" ), @@ -1406,7 +1406,7 @@ comp_selection player::select_item_component( const std::vector 0 ) ? component.count * batch : abs( component.count ); + int count = ( component.count > 0 ) ? component.count * batch : std::abs( component.count ); if( item::count_by_charges( type ) && count > 0 ) { int map_charges = map_inv.charges_of( type, INT_MAX, filter ); @@ -1603,7 +1603,7 @@ std::list player::consume_items( map &m, const comp_selection & const tripoint &loc = origin; const bool by_charges = item::count_by_charges( selected_comp.type ) && selected_comp.count > 0; // Count given to use_amount/use_charges, changed by those functions! - int real_count = ( selected_comp.count > 0 ) ? selected_comp.count * batch : abs( + int real_count = ( selected_comp.count > 0 ) ? selected_comp.count * batch : std::abs( selected_comp.count ); // First try to get everything from the map, than (remaining amount) from player if( is.use_from & use_from_map ) { diff --git a/src/crafting.h b/src/crafting.h index aabf76860ab03..70a0652e17dc6 100644 --- a/src/crafting.h +++ b/src/crafting.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CRAFTING_H -#define CRAFTING_H +#ifndef CATA_SRC_CRAFTING_H +#define CATA_SRC_CRAFTING_H #include @@ -23,4 +23,4 @@ void remove_ammo( item &dis_item, player &p ); // same as above but for each item in the list void remove_ammo( std::list &dis_items, player &p ); -#endif +#endif // CATA_SRC_CRAFTING_H diff --git a/src/crafting_gui.h b/src/crafting_gui.h index 8abee778a7581..a7e087b85e9a8 100644 --- a/src/crafting_gui.h +++ b/src/crafting_gui.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CRAFTING_GUI_H -#define CRAFTING_GUI_H +#ifndef CATA_SRC_CRAFTING_GUI_H +#define CATA_SRC_CRAFTING_GUI_H class recipe; class JsonObject; @@ -10,4 +10,4 @@ const recipe *select_crafting_recipe( int &batch_size ); void load_recipe_category( const JsonObject &jsobj ); void reset_recipe_categories(); -#endif // CRAFT_GUI_H +#endif // CATA_SRC_CRAFTING_GUI_H diff --git a/src/crash.h b/src/crash.h index 773dabc027a66..20941c066bff3 100644 --- a/src/crash.h +++ b/src/crash.h @@ -1,8 +1,8 @@ #pragma once -#ifndef CRASH_H -#define CRASH_H +#ifndef CATA_SRC_CRASH_H +#define CATA_SRC_CRASH_H // Initialize crash handlers for windows void init_crash_handlers(); -#endif +#endif // CATA_SRC_CRASH_H diff --git a/src/creature.cpp b/src/creature.cpp index 6c545260be01f..e7d5c499e8469 100644 --- a/src/creature.cpp +++ b/src/creature.cpp @@ -222,8 +222,8 @@ bool Creature::sees( const Creature &critter ) const ( critter.has_flag( MF_NIGHT_INVISIBILITY ) && g->m.light_at( critter.pos() ) <= LL_LOW ) || ( critter.is_underwater() && !is_underwater() && g->m.is_divable( critter.pos() ) ) || ( g->m.has_flag_ter_or_furn( TFLAG_HIDE_PLACE, critter.pos() ) && - !( abs( posx() - critter.posx() ) <= 1 && abs( posy() - critter.posy() ) <= 1 && - abs( posz() - critter.posz() ) <= 1 ) ) ) { + !( std::abs( posx() - critter.posx() ) <= 1 && std::abs( posy() - critter.posy() ) <= 1 && + std::abs( posz() - critter.posz() ) <= 1 ) ) ) { return false; } if( ch != nullptr ) { @@ -421,7 +421,7 @@ Creature *Creature::auto_find_hostile_target( int range, int &boo_hoo, int area bool maybe_boo = false; if( angle_iff ) { int tangle = coord_to_angle( pos(), m->pos() ); - int diff = abs( u_angle - tangle ); + int diff = std::abs( u_angle - tangle ); // Player is in the angle and not too far behind the target if( ( diff + iff_hangle > 360 || diff < iff_hangle ) && ( dist * 3 / 2 + 6 > pldist ) ) { diff --git a/src/creature.h b/src/creature.h index b598b825db883..22a87ead8df5e 100644 --- a/src/creature.h +++ b/src/creature.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CREATURE_H -#define CREATURE_H +#ifndef CATA_SRC_CREATURE_H +#define CATA_SRC_CREATURE_H #include #include @@ -840,4 +840,4 @@ class Creature int pain; }; -#endif +#endif // CATA_SRC_CREATURE_H diff --git a/src/creature_tracker.h b/src/creature_tracker.h index 38b2879ebd297..936aea37ade56 100644 --- a/src/creature_tracker.h +++ b/src/creature_tracker.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CREATURE_TRACKER_H -#define CREATURE_TRACKER_H +#ifndef CATA_SRC_CREATURE_TRACKER_H +#define CATA_SRC_CREATURE_TRACKER_H #include #include @@ -98,4 +98,4 @@ class Creature_tracker void remove_from_location_map( const monster &critter ); }; -#endif +#endif // CATA_SRC_CREATURE_TRACKER_H diff --git a/src/cursesdef.h b/src/cursesdef.h index 8d3070a3956aa..75fb370a23841 100644 --- a/src/cursesdef.h +++ b/src/cursesdef.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CURSESDEF_H -#define CURSESDEF_H +#ifndef CATA_SRC_CURSESDEF_H +#define CATA_SRC_CURSESDEF_H #include #include @@ -135,4 +135,4 @@ int getcurx( const window &win ); int getcury( const window &win ); } // namespace catacurses -#endif +#endif // CATA_SRC_CURSESDEF_H diff --git a/src/cursesport.h b/src/cursesport.h index 9b1cd1c13cf4c..c024657aeeaa0 100644 --- a/src/cursesport.h +++ b/src/cursesport.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CATACURSE_H -#define CATACURSE_H +#ifndef CATA_SRC_CURSESPORT_H +#define CATA_SRC_CURSESPORT_H #include #if defined(TILES) || defined(_WIN32) @@ -87,5 +87,5 @@ bool handle_resize( int w, int h ); int get_scaling_factor(); #endif -#endif +#endif // CATA_SRC_CURSESPORT_H diff --git a/src/damage.h b/src/damage.h index c5b5c277ed430..6302bd3eed6ca 100644 --- a/src/damage.h +++ b/src/damage.h @@ -1,6 +1,6 @@ #pragma once -#ifndef DAMAGE_H -#define DAMAGE_H +#ifndef CATA_SRC_DAMAGE_H +#define CATA_SRC_DAMAGE_H #include #include @@ -130,4 +130,4 @@ resistances load_resistances_instance( const JsonObject &jo ); // Handles some shorthands std::array load_damage_array( const JsonObject &jo ); -#endif +#endif // CATA_SRC_DAMAGE_H diff --git a/src/debug.h b/src/debug.h index 6078257df87d2..79a7028858358 100644 --- a/src/debug.h +++ b/src/debug.h @@ -1,6 +1,6 @@ #pragma once -#ifndef DEBUG_H -#define DEBUG_H +#ifndef CATA_SRC_DEBUG_H +#define CATA_SRC_DEBUG_H #include "string_formatter.h" @@ -203,4 +203,4 @@ void debug_write_backtrace( std::ostream &out ); #endif // vim:tw=72:sw=4:fdm=marker:fdl=0: -#endif +#endif // CATA_SRC_DEBUG_H diff --git a/src/debug_menu.h b/src/debug_menu.h index 6b0c3158d4a97..25cb7c20020c9 100644 --- a/src/debug_menu.h +++ b/src/debug_menu.h @@ -1,6 +1,6 @@ #pragma once -#ifndef DEBUG_MENU_H -#define DEBUG_MENU_H +#ifndef CATA_SRC_DEBUG_MENU_H +#define CATA_SRC_DEBUG_MENU_H struct tripoint; @@ -32,4 +32,4 @@ void debug(); } // namespace debug_menu -#endif // DEBUG_MENU_H +#endif // CATA_SRC_DEBUG_MENU_H diff --git a/src/dependency_tree.h b/src/dependency_tree.h index 56d6aa9e52698..99fba3bb109d2 100644 --- a/src/dependency_tree.h +++ b/src/dependency_tree.h @@ -1,6 +1,6 @@ #pragma once -#ifndef DEPENDENCY_TREE_H -#define DEPENDENCY_TREE_H +#ifndef CATA_SRC_DEPENDENCY_TREE_H +#define CATA_SRC_DEPENDENCY_TREE_H #include #include @@ -93,4 +93,4 @@ class dependency_tree }; -#endif +#endif // CATA_SRC_DEPENDENCY_TREE_H diff --git a/src/descriptions.cpp b/src/descriptions.cpp index 1f90ad56bc574..a301d8caa4245 100644 --- a/src/descriptions.cpp +++ b/src/descriptions.cpp @@ -39,25 +39,23 @@ static const Creature *seen_critter( const game &g, const tripoint &p ) void game::extended_description( const tripoint &p ) { - const int left = 0; - const int right = TERMX; + ui_adaptor ui; const int top = 3; - const int bottom = TERMY; - const int width = right - left; - const int height = bottom - top; - catacurses::window w_head = catacurses::newwin( top, TERMX, point_zero ); - catacurses::window w_main = catacurses::newwin( height, width, point( left, top ) ); - // TODO: De-hardcode - std::string header_message = - _( "c to describe creatures, f to describe furniture, t to describe terrain, Esc/Enter to close." ); - mvwprintz( w_head, point_zero, c_white, header_message ); - - // Set up line drawings - for( int i = 0; i < TERMX; i++ ) { - mvwputch( w_head, point( i, top - 1 ), c_white, LINE_OXOX ); - } + int width = 0; + catacurses::window w_head; + catacurses::window w_main; + ui.on_screen_resize( [&]( ui_adaptor & ui ) { + const int left = 0; + const int right = TERMX; + const int bottom = TERMY; + width = right - left; + const int height = bottom - top; + w_head = catacurses::newwin( top, TERMX, point_zero ); + w_main = catacurses::newwin( height, width, point( left, top ) ); + ui.position( point_zero, point( TERMX, TERMY ) ); + } ); + ui.mark_resize(); - wrefresh( w_head ); // Default to critter (if any), furniture (if any), then terrain. description_target cur_target = description_target::terrain; if( seen_critter( *this, p ) != nullptr ) { @@ -65,12 +63,31 @@ void game::extended_description( const tripoint &p ) } else if( g->m.has_furn( p ) ) { cur_target = description_target::furniture; } - int ch = 'c'; - // FIXME: temporarily disable redrawing of lower UIs before this UI is migrated to `ui_adaptor` - ui_adaptor ui( ui_adaptor::disable_uis_below {} ); + std::string action; + input_context ctxt( "EXTENDED_DESCRIPTION" ); + ctxt.register_action( "CREATURE" ); + ctxt.register_action( "FURNITURE" ); + ctxt.register_action( "TERRAIN" ); + ctxt.register_action( "CONFIRM" ); + ctxt.register_action( "QUIT" ); + ctxt.register_action( "HELP_KEYBINDINGS" ); + + ui.on_redraw( [&]( const ui_adaptor & ) { + werase( w_head ); + mvwprintz( w_head, point_zero, c_white, + _( "[%s] describe creatures, [%s] describe furniture, " + "[%s] describe terrain, [%s] close." ), + ctxt.get_desc( "CREATURE" ), ctxt.get_desc( "FURNITURE" ), + ctxt.get_desc( "TERRAIN" ), ctxt.get_desc( "QUIT" ) ); + + // Set up line drawings + for( int i = 0; i < TERMX; i++ ) { + mvwputch( w_head, point( i, top - 1 ), c_white, LINE_OXOX ); + } + + wrefresh( w_head ); - do { std::string desc; // Allow looking at invisible tiles - player may want to examine hallucinations etc. switch( cur_target ) { @@ -111,21 +128,19 @@ void game::extended_description( const tripoint &p ) werase( w_main ); fold_and_print_from( w_main, point_zero, width, 0, c_light_gray, desc ); wrefresh( w_main ); - // TODO: use input context - ch = inp_mngr.get_input_event().get_first_input(); - switch( ch ) { - case 'c': - cur_target = description_target::creature; - break; - case 'f': - cur_target = description_target::furniture; - break; - case 't': - cur_target = description_target::terrain; - break; - } + } ); - } while( ch != KEY_ESCAPE && ch != '\n' ); + do { + ui_manager::redraw(); + action = ctxt.handle_input(); + if( action == "CREATURE" ) { + cur_target = description_target::creature; + } else if( action == "FURNITURE" ) { + cur_target = description_target::furniture; + } else if( action == "TERRAIN" ) { + cur_target = description_target::terrain; + } + } while( action != "CONFIRM" && action != "QUIT" ); } std::string map_data_common_t::extended_description() const diff --git a/src/dialogue.h b/src/dialogue.h index 12838e4d74150..14a9073b8de90 100644 --- a/src/dialogue.h +++ b/src/dialogue.h @@ -1,6 +1,6 @@ #pragma once -#ifndef DIALOGUE_H -#define DIALOGUE_H +#ifndef CATA_SRC_DIALOGUE_H +#define CATA_SRC_DIALOGUE_H #include #include @@ -436,4 +436,4 @@ class json_talk_topic void unload_talk_topics(); void load_talk_topic( const JsonObject &jo ); -#endif +#endif // CATA_SRC_DIALOGUE_H diff --git a/src/dialogue_win.h b/src/dialogue_win.h index 403202d414772..0638fcfb0ff3a 100644 --- a/src/dialogue_win.h +++ b/src/dialogue_win.h @@ -1,6 +1,6 @@ #pragma once -#ifndef DIALOGUE_WIN_H -#define DIALOGUE_WIN_H +#ifndef CATA_SRC_DIALOGUE_WIN_H +#define CATA_SRC_DIALOGUE_WIN_H #include #include @@ -50,5 +50,5 @@ class dialogue_window std::string npc_name; }; -#endif +#endif // CATA_SRC_DIALOGUE_WIN_H diff --git a/src/disease.h b/src/disease.h index 3be3d07c725ec..3f8cb934779d2 100644 --- a/src/disease.h +++ b/src/disease.h @@ -1,6 +1,6 @@ #pragma once -#ifndef DISEASE_H -#define DISEASE_H +#ifndef CATA_SRC_DISEASE_H +#define CATA_SRC_DISEASE_H #include #include @@ -34,5 +34,5 @@ class disease_type efftype_id symptoms; }; -#endif +#endif // CATA_SRC_DISEASE_H diff --git a/src/dispersion.h b/src/dispersion.h index ea83ca39e60e3..0b5872b1758d4 100644 --- a/src/dispersion.h +++ b/src/dispersion.h @@ -1,6 +1,6 @@ #pragma once -#ifndef DISPERSION_H -#define DISPERSION_H +#ifndef CATA_SRC_DISPERSION_H +#define CATA_SRC_DISPERSION_H #include #include @@ -30,4 +30,4 @@ class dispersion_sources friend std::ostream &operator<<( std::ostream &stream, const dispersion_sources &sources ); }; -#endif +#endif // CATA_SRC_DISPERSION_H diff --git a/src/drawing_primitives.h b/src/drawing_primitives.h index 279716cc34ac1..840c65364ff68 100644 --- a/src/drawing_primitives.h +++ b/src/drawing_primitives.h @@ -1,6 +1,6 @@ #pragma once -#ifndef DRAWING_PRIMITIVES_H -#define DRAWING_PRIMITIVES_H +#ifndef CATA_SRC_DRAWING_PRIMITIVES_H +#define CATA_SRC_DRAWING_PRIMITIVES_H #include @@ -17,4 +17,4 @@ void draw_circle( std::functionset, const rl_vec2d &p, do void draw_circle( std::functionset, const point &p, int rad ); -#endif +#endif // CATA_SRC_DRAWING_PRIMITIVES_H diff --git a/src/dump.cpp b/src/dump.cpp index 828e125e0b031..6794fd95669ed 100644 --- a/src/dump.cpp +++ b/src/dump.cpp @@ -309,7 +309,7 @@ bool game::dump_stats( const std::string &what, dump_mode mode, std::vector r; r.push_back( obj.name() ); r.push_back( obj.location ); - r.push_back( to_string( static_cast( ceil( to_gram( item( obj.item ).weight() ) / + r.push_back( to_string( static_cast( std::ceil( to_gram( item( obj.item ).weight() ) / 1000.0 ) ) ) ); r.push_back( to_string( obj.size / units::legacy_volume_factor ) ); rows.push_back( r ); diff --git a/src/editmap.h b/src/editmap.h index 86f03117eea2d..a0640958835b7 100644 --- a/src/editmap.h +++ b/src/editmap.h @@ -1,6 +1,6 @@ #pragma once -#ifndef EDITMAP_H -#define EDITMAP_H +#ifndef CATA_SRC_EDITMAP_H +#define CATA_SRC_EDITMAP_H #include #include @@ -98,4 +98,4 @@ class editmap ~editmap(); }; -#endif +#endif // CATA_SRC_EDITMAP_H diff --git a/src/effect.h b/src/effect.h index 35dc88582d74f..eebaad84cc062 100644 --- a/src/effect.h +++ b/src/effect.h @@ -1,6 +1,6 @@ #pragma once -#ifndef EFFECT_H -#define EFFECT_H +#ifndef CATA_SRC_EFFECT_H +#define CATA_SRC_EFFECT_H #include #include @@ -303,4 +303,4 @@ class effects_map : public { }; -#endif +#endif // CATA_SRC_EFFECT_H diff --git a/src/emit.h b/src/emit.h index 52a226b2b6747..1fc1842a6f9e7 100644 --- a/src/emit.h +++ b/src/emit.h @@ -1,6 +1,6 @@ #pragma once -#ifndef EMIT_H -#define EMIT_H +#ifndef CATA_SRC_EMIT_H +#define CATA_SRC_EMIT_H #include #include @@ -71,4 +71,4 @@ class emit std::string field_name; }; -#endif +#endif // CATA_SRC_EMIT_H diff --git a/src/enum_bitset.h b/src/enum_bitset.h index 50aa6fbbc7c0f..ca2cb95849834 100644 --- a/src/enum_bitset.h +++ b/src/enum_bitset.h @@ -1,6 +1,6 @@ #pragma once -#ifndef ENUM_BITSET_H -#define ENUM_BITSET_H +#ifndef CATA_SRC_ENUM_BITSET_H +#define CATA_SRC_ENUM_BITSET_H #include #include @@ -79,4 +79,4 @@ class enum_bitset std::bitset::size()> bits; }; -#endif // ENUM_BITSET_H +#endif // CATA_SRC_ENUM_BITSET_H diff --git a/src/enum_conversions.h b/src/enum_conversions.h index 253cc8969efa7..774225c4300de 100644 --- a/src/enum_conversions.h +++ b/src/enum_conversions.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CATA_ENUM_CONVERSIONS_H -#define CATA_ENUM_CONVERSIONS_H +#ifndef CATA_SRC_ENUM_CONVERSIONS_H +#define CATA_SRC_ENUM_CONVERSIONS_H #include @@ -84,4 +84,4 @@ E string_to_enum( const std::string &data ) /*@}*/ } // namespace io -#endif // CATA_ENUM_CONVERSIONS_H +#endif // CATA_SRC_ENUM_CONVERSIONS_H diff --git a/src/enum_traits.h b/src/enum_traits.h index 2cb3af1e20212..7695bd182ba4e 100644 --- a/src/enum_traits.h +++ b/src/enum_traits.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CATA_ENUM_TRAITS_H -#define CATA_ENUM_TRAITS_H +#ifndef CATA_SRC_ENUM_TRAITS_H +#define CATA_SRC_ENUM_TRAITS_H template struct enum_traits; @@ -19,4 +19,4 @@ struct has_enum_traits : std::false_type {}; template struct has_enum_traits> : std::true_type {}; -#endif // CATA_ENUM_TRAITS_H +#endif // CATA_SRC_ENUM_TRAITS_H diff --git a/src/enums.h b/src/enums.h index e75c6a8b1deec..b33114cfeaee2 100644 --- a/src/enums.h +++ b/src/enums.h @@ -1,6 +1,6 @@ #pragma once -#ifndef ENUMS_H -#define ENUMS_H +#ifndef CATA_SRC_ENUMS_H +#define CATA_SRC_ENUMS_H template struct enum_traits; @@ -282,4 +282,4 @@ struct game_message_params { game_message_flags flags; }; -#endif +#endif // CATA_SRC_ENUMS_H diff --git a/src/event.h b/src/event.h index 40a8515d4d659..e5a42030cffe9 100644 --- a/src/event.h +++ b/src/event.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CATA_EVENT_H -#define CATA_EVENT_H +#ifndef CATA_SRC_EVENT_H +#define CATA_SRC_EVENT_H #include #include @@ -620,4 +620,4 @@ struct make_event_helper> { } // namespace cata -#endif // CATA_EVENT_H +#endif // CATA_SRC_EVENT_H diff --git a/src/event_bus.h b/src/event_bus.h index dfc9a681ae21a..f90234d629ed8 100644 --- a/src/event_bus.h +++ b/src/event_bus.h @@ -1,6 +1,6 @@ #pragma once -#ifndef EVENT_BUS_H -#define EVENT_BUS_H +#ifndef CATA_SRC_EVENT_BUS_H +#define CATA_SRC_EVENT_BUS_H #include #include @@ -43,4 +43,4 @@ class event_bus std::vector subscribers; }; -#endif // EVENT_BUS_H +#endif // CATA_SRC_EVENT_BUS_H diff --git a/src/event_field_transformations.h b/src/event_field_transformations.h index c51b3a68bbf5d..55b1f3d4a8cd9 100644 --- a/src/event_field_transformations.h +++ b/src/event_field_transformations.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CATA_EVENT_FIELD_TRANSFORMATIONS_H -#define CATA_EVENT_FIELD_TRANSFORMATIONS_H +#ifndef CATA_SRC_EVENT_FIELD_TRANSFORMATIONS_H +#define CATA_SRC_EVENT_FIELD_TRANSFORMATIONS_H #include #include @@ -11,4 +11,4 @@ using EventFieldTransformation = std::vector( * )( const cata_variant & ); extern const std::unordered_map event_field_transformations; -#endif +#endif // CATA_SRC_EVENT_FIELD_TRANSFORMATIONS_H diff --git a/src/event_statistics.h b/src/event_statistics.h index e8ae67c6aa59a..1a93759e18816 100644 --- a/src/event_statistics.h +++ b/src/event_statistics.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CATA_EVENT_STATISTICS_H -#define CATA_EVENT_STATISTICS_H +#ifndef CATA_SRC_EVENT_STATISTICS_H +#define CATA_SRC_EVENT_STATISTICS_H #include #include @@ -103,4 +103,4 @@ class score string_id stat_; }; -#endif // CATA_EVENT_STATISTICS_H +#endif // CATA_SRC_EVENT_STATISTICS_H diff --git a/src/explosion.cpp b/src/explosion.cpp index ea9e2f50fb37e..ffe2af1e9263e 100644 --- a/src/explosion.cpp +++ b/src/explosion.cpp @@ -868,7 +868,8 @@ fragment_cloud shrapnel_calc( const fragment_cloud &initial, // SWAG coefficient of drag. constexpr float Cd = 0.5; fragment_cloud new_cloud; - new_cloud.velocity = initial.velocity * exp( -cloud.velocity * ( ( Cd * fragment_area * distance ) / + new_cloud.velocity = initial.velocity * std::exp( -cloud.velocity * ( ( + Cd * fragment_area * distance ) / ( 2.0 * fragment_mass ) ) ); // Two effects, the accumulated proportion of blocked fragments, // and the inverse-square dilution of fragments with distance. diff --git a/src/explosion.h b/src/explosion.h index 8a92a4ff09c67..c24d5f2087051 100644 --- a/src/explosion.h +++ b/src/explosion.h @@ -1,6 +1,6 @@ #pragma once -#ifndef EXPLOSION_H -#define EXPLOSION_H +#ifndef CATA_SRC_EXPLOSION_H +#define CATA_SRC_EXPLOSION_H #include #include @@ -85,4 +85,4 @@ void draw_custom_explosion( const tripoint &p, const std::map FULL_SCREEN_HEIGHT ? ( TERMY - FULL_SCREEN_HEIGHT ) / 2 : 0; - int term_y = TERMX > FULL_SCREEN_WIDTH ? ( TERMX - FULL_SCREEN_WIDTH ) / 2 : 0; + catacurses::window w_missions; + int entries_per_page = 0; - catacurses::window w_missions = catacurses::newwin( FULL_SCREEN_HEIGHT, FULL_SCREEN_WIDTH, - point( term_y, term_x ) ); + ui_adaptor ui; + ui.on_screen_resize( [&]( ui_adaptor & ui ) { + const int term_x = TERMY > FULL_SCREEN_HEIGHT ? ( TERMY - FULL_SCREEN_HEIGHT ) / 2 : 0; + const int term_y = TERMX > FULL_SCREEN_WIDTH ? ( TERMX - FULL_SCREEN_WIDTH ) / 2 : 0; + + w_missions = catacurses::newwin( FULL_SCREEN_HEIGHT, FULL_SCREEN_WIDTH, + point( term_y, term_x ) ); + + entries_per_page = FULL_SCREEN_HEIGHT - 4; + + ui.position_from_window( w_missions ); + } ); + ui.mark_resize(); enum class tab_mode : int { TAB_MYFACTION = 0, @@ -682,7 +693,6 @@ void faction_manager::display() const g->validate_camps(); g->validate_npc_followers(); tab_mode tab = tab_mode::FIRST_TAB; - const int entries_per_page = FULL_SCREEN_HEIGHT - 4; size_t selection = 0; input_context ctxt( "FACTION MANAGER" ); ctxt.register_cardinal(); @@ -692,66 +702,20 @@ void faction_manager::display() const ctxt.register_action( "PREV_TAB" ); ctxt.register_action( "CONFIRM" ); ctxt.register_action( "QUIT" ); - - // FIXME: temporarily disable redrawing of lower UIs before this UI is migrated to `ui_adaptor` - ui_adaptor ui( ui_adaptor::disable_uis_below {} ); - - while( true ) { + ctxt.register_action( "HELP_KEYBINDINGS" ); + + std::vector followers; + std::vector valfac; // Factions that we know of. + npc *guy = nullptr; + const faction *cur_fac = nullptr; + bool interactable = false; + bool radio_interactable = false; + basecamp *camp = nullptr; + std::vector camps; + size_t active_vec_size = 0; + + ui.on_redraw( [&]( const ui_adaptor & ) { werase( w_missions ); - // create a list of NPCs, visible and the ones on overmapbuffer - std::vector followers; - for( auto &elem : g->get_follower_list() ) { - shared_ptr_fast npc_to_get = overmap_buffer.find_npc( elem ); - if( !npc_to_get ) { - continue; - } - npc *npc_to_add = npc_to_get.get(); - followers.push_back( npc_to_add ); - } - std::vector valfac; // Factions that we know of. - for( const auto &elem : g->faction_manager_ptr->all() ) { - if( elem.second.known_by_u && elem.second.id != faction_id( "your_followers" ) ) { - valfac.push_back( &elem.second ); - } - } - npc *guy = nullptr; - const faction *cur_fac = nullptr; - bool interactable = false; - bool radio_interactable = false; - basecamp *camp = nullptr; - // create a list of faction camps - std::vector camps; - for( auto elem : g->u.camps ) { - cata::optional p = overmap_buffer.find_camp( elem.xy() ); - if( !p ) { - continue; - } - basecamp *temp_camp = *p; - camps.push_back( temp_camp ); - } - if( tab < tab_mode::FIRST_TAB || tab >= tab_mode::NUM_TABS ) { - debugmsg( "The sanity check failed because tab=%d", static_cast( tab ) ); - tab = tab_mode::FIRST_TAB; - } - size_t active_vec_size = camps.size(); - // entries_per_page * page number - const size_t top_of_page = entries_per_page * ( selection / entries_per_page ); - if( tab == tab_mode::TAB_FOLLOWERS ) { - if( selection < followers.size() ) { - guy = followers[selection]; - } - active_vec_size = followers.size(); - } else if( tab == tab_mode::TAB_MYFACTION ) { - if( selection < camps.size() ) { - camp = camps[selection]; - } - active_vec_size = camps.size(); - } else if( tab == tab_mode::TAB_OTHERFACTIONS ) { - if( selection < valfac.size() ) { - cur_fac = valfac[selection]; - } - active_vec_size = valfac.size(); - } for( int i = 3; i < FULL_SCREEN_HEIGHT - 1; i++ ) { mvwputch( w_missions, point( 30, i ), BORDER_COLOR, LINE_XOXO ); @@ -770,6 +734,9 @@ void faction_manager::display() const mvwputch( w_missions, point( 30, FULL_SCREEN_HEIGHT - 1 ), BORDER_COLOR, LINE_XXOX ); // _|_ const nc_color col = c_white; + // entries_per_page * page number + const size_t top_of_page = entries_per_page * ( selection / entries_per_page ); + switch( tab ) { case tab_mode::TAB_MYFACTION: { const std::string no_camp = _( "You have no camps" ); @@ -843,6 +810,63 @@ void faction_manager::display() const break; } wrefresh( w_missions ); + } ); + + while( true ) { + // create a list of NPCs, visible and the ones on overmapbuffer + followers.clear(); + for( auto &elem : g->get_follower_list() ) { + shared_ptr_fast npc_to_get = overmap_buffer.find_npc( elem ); + if( !npc_to_get ) { + continue; + } + npc *npc_to_add = npc_to_get.get(); + followers.push_back( npc_to_add ); + } + valfac.clear(); + for( const auto &elem : g->faction_manager_ptr->all() ) { + if( elem.second.known_by_u && elem.second.id != faction_id( "your_followers" ) ) { + valfac.push_back( &elem.second ); + } + } + guy = nullptr; + cur_fac = nullptr; + interactable = false; + radio_interactable = false; + camp = nullptr; + // create a list of faction camps + camps.clear(); + for( auto elem : g->u.camps ) { + cata::optional p = overmap_buffer.find_camp( elem.xy() ); + if( !p ) { + continue; + } + basecamp *temp_camp = *p; + camps.push_back( temp_camp ); + } + if( tab < tab_mode::FIRST_TAB || tab >= tab_mode::NUM_TABS ) { + debugmsg( "The sanity check failed because tab=%d", static_cast( tab ) ); + tab = tab_mode::FIRST_TAB; + } + active_vec_size = camps.size(); + if( tab == tab_mode::TAB_FOLLOWERS ) { + if( selection < followers.size() ) { + guy = followers[selection]; + } + active_vec_size = followers.size(); + } else if( tab == tab_mode::TAB_MYFACTION ) { + if( selection < camps.size() ) { + camp = camps[selection]; + } + active_vec_size = camps.size(); + } else if( tab == tab_mode::TAB_OTHERFACTIONS ) { + if( selection < valfac.size() ) { + cur_fac = valfac[selection]; + } + active_vec_size = valfac.size(); + } + + ui_manager::redraw(); const std::string action = ctxt.handle_input(); if( action == "NEXT_TAB" || action == "RIGHT" ) { tab = static_cast( static_cast( tab ) + 1 ); @@ -877,6 +901,4 @@ void faction_manager::display() const break; } } - - g->refresh_all(); } diff --git a/src/faction.h b/src/faction.h index 0ca2db4ed1bcd..9c9f2ae1ac506 100644 --- a/src/faction.h +++ b/src/faction.h @@ -1,6 +1,6 @@ #pragma once -#ifndef FACTION_H -#define FACTION_H +#ifndef CATA_SRC_FACTION_H +#define CATA_SRC_FACTION_H #include #include @@ -137,4 +137,4 @@ class faction_manager faction *get( const faction_id &id, bool complain = true ); }; -#endif +#endif // CATA_SRC_FACTION_H diff --git a/src/faction_camp.cpp b/src/faction_camp.cpp index 1f9f12e6207fb..95c8115f7f7c6 100644 --- a/src/faction_camp.cpp +++ b/src/faction_camp.cpp @@ -1640,39 +1640,39 @@ void basecamp::abandon_camp() void basecamp::worker_assignment_ui() { - int term_x = TERMY > FULL_SCREEN_HEIGHT ? ( TERMY - FULL_SCREEN_HEIGHT ) / 2 : 0; - int term_y = TERMX > FULL_SCREEN_WIDTH ? ( TERMX - FULL_SCREEN_WIDTH ) / 2 : 0; + int entries_per_page = 0; + catacurses::window w_followers; + + ui_adaptor ui; + ui.on_screen_resize( [&]( ui_adaptor & ui ) { + const int term_x = TERMY > FULL_SCREEN_HEIGHT ? ( TERMY - FULL_SCREEN_HEIGHT ) / 2 : 0; + const int term_y = TERMX > FULL_SCREEN_WIDTH ? ( TERMX - FULL_SCREEN_WIDTH ) / 2 : 0; + + w_followers = catacurses::newwin( FULL_SCREEN_HEIGHT, FULL_SCREEN_WIDTH, + point( term_y, term_x ) ); + entries_per_page = FULL_SCREEN_HEIGHT - 4; + + ui.position_from_window( w_followers ); + } ); + ui.mark_resize(); - catacurses::window w_followers = catacurses::newwin( FULL_SCREEN_HEIGHT, FULL_SCREEN_WIDTH, - point( term_y, term_x ) ); - const int entries_per_page = FULL_SCREEN_HEIGHT - 4; size_t selection = 0; input_context ctxt( "FACTION MANAGER" ); - ctxt.register_cardinal(); ctxt.register_updown(); - ctxt.register_action( "ANY_INPUT" ); ctxt.register_action( "CONFIRM" ); ctxt.register_action( "QUIT" ); + ctxt.register_action( "HELP_KEYBINDINGS" ); validate_assignees(); g->validate_npc_followers(); - while( true ) { + + std::vector followers; + npc *cur_npc = nullptr; + + ui.on_redraw( [&]( const ui_adaptor & ) { werase( w_followers ); - // create a list of npcs stationed at this camp - std::vector followers; - for( const character_id &elem : g->get_follower_list() ) { - shared_ptr_fast npc_to_get = overmap_buffer.find_npc( elem ); - if( !npc_to_get || !npc_to_get->is_following() ) { - continue; - } - npc *npc_to_add = npc_to_get.get(); - followers.push_back( npc_to_add ); - } - npc *cur_npc = nullptr; + // entries_per_page * page number const size_t top_of_page = entries_per_page * ( selection / entries_per_page ); - if( !followers.empty() ) { - cur_npc = followers[selection]; - } for( int i = 0; i < FULL_SCREEN_HEIGHT - 1; i++ ) { mvwputch( w_followers, point( 45, i ), BORDER_COLOR, LINE_XOXO ); @@ -1694,6 +1694,25 @@ void basecamp::worker_assignment_ui() mvwprintz( w_followers, point( 1, FULL_SCREEN_HEIGHT - 1 ), c_light_gray, _( "Press %s to assign this follower to this camp." ), ctxt.get_desc( "CONFIRM" ) ); wrefresh( w_followers ); + } ); + + while( true ) { + // create a list of npcs stationed at this camp + followers.clear(); + for( const character_id &elem : g->get_follower_list() ) { + shared_ptr_fast npc_to_get = overmap_buffer.find_npc( elem ); + if( !npc_to_get || !npc_to_get->is_following() ) { + continue; + } + npc *npc_to_add = npc_to_get.get(); + followers.push_back( npc_to_add ); + } + cur_npc = nullptr; + if( !followers.empty() ) { + cur_npc = followers[selection]; + } + + ui_manager::redraw(); const std::string action = ctxt.handle_input(); if( action == "DOWN" ) { selection++; @@ -1714,44 +1733,41 @@ void basecamp::worker_assignment_ui() break; } } - - g->refresh_all(); } void basecamp::job_assignment_ui() { - int term_x = TERMY > FULL_SCREEN_HEIGHT ? ( TERMY - FULL_SCREEN_HEIGHT ) / 2 : 0; - int term_y = TERMX > FULL_SCREEN_WIDTH ? ( TERMX - FULL_SCREEN_WIDTH ) / 2 : 0; + int entries_per_page = 0; + catacurses::window w_jobs; + + ui_adaptor ui; + ui.on_screen_resize( [&]( ui_adaptor & ui ) { + const int term_x = TERMY > FULL_SCREEN_HEIGHT ? ( TERMY - FULL_SCREEN_HEIGHT ) / 2 : 0; + const int term_y = TERMX > FULL_SCREEN_WIDTH ? ( TERMX - FULL_SCREEN_WIDTH ) / 2 : 0; + + w_jobs = catacurses::newwin( FULL_SCREEN_HEIGHT, FULL_SCREEN_WIDTH, + point( term_y, term_x ) ); + + entries_per_page = FULL_SCREEN_HEIGHT - 4; + + ui.position_from_window( w_jobs ); + } ); + ui.mark_resize(); - catacurses::window w_jobs = catacurses::newwin( FULL_SCREEN_HEIGHT, FULL_SCREEN_WIDTH, - point( term_y, term_x ) ); - const int entries_per_page = FULL_SCREEN_HEIGHT - 4; size_t selection = 0; input_context ctxt( "FACTION MANAGER" ); - ctxt.register_cardinal(); ctxt.register_updown(); - ctxt.register_action( "ANY_INPUT" ); ctxt.register_action( "CONFIRM" ); ctxt.register_action( "QUIT" ); - // FIXME: temporarily disable redrawing of lower UIs before this UI is migrated to `ui_adaptor` - ui_adaptor ui( ui_adaptor::disable_uis_below {} ); + ctxt.register_action( "HELP_KEYBINDINGS" ); validate_assignees(); - while( true ) { + + std::vector stationed_npcs; + npc *cur_npc = nullptr; + + ui.on_redraw( [&]( const ui_adaptor & ) { werase( w_jobs ); - // create a list of npcs stationed at this camp - std::vector stationed_npcs; - for( const auto &elem : get_npcs_assigned() ) { - if( elem ) { - stationed_npcs.push_back( elem.get() ); - } - } - npc *cur_npc = nullptr; - // entries_per_page * page number const size_t top_of_page = entries_per_page * ( selection / entries_per_page ); - if( !stationed_npcs.empty() ) { - cur_npc = stationed_npcs[selection]; - } - for( int i = 0; i < FULL_SCREEN_HEIGHT - 1; i++ ) { mvwputch( w_jobs, point( 45, i ), BORDER_COLOR, LINE_XOXO ); } @@ -1791,6 +1807,24 @@ void basecamp::job_assignment_ui() mvwprintz( w_jobs, point( 1, FULL_SCREEN_HEIGHT - 1 ), c_light_gray, _( "Press %s to change this workers job priorities." ), ctxt.get_desc( "CONFIRM" ) ); wrefresh( w_jobs ); + } ); + + while( true ) { + // create a list of npcs stationed at this camp + stationed_npcs.clear(); + for( const auto &elem : get_npcs_assigned() ) { + if( elem ) { + stationed_npcs.push_back( elem.get() ); + } + } + cur_npc = nullptr; + // entries_per_page * page number + if( !stationed_npcs.empty() ) { + cur_npc = stationed_npcs[selection]; + } + + ui_manager::redraw(); + const std::string action = ctxt.handle_input(); if( action == "DOWN" ) { selection++; @@ -1843,8 +1877,6 @@ void basecamp::job_assignment_ui() break; } } - - g->refresh_all(); } void basecamp::start_menial_labor() diff --git a/src/faction_camp.h b/src/faction_camp.h index 2f9c56c053ae9..be2f5049caa9f 100644 --- a/src/faction_camp.h +++ b/src/faction_camp.h @@ -1,6 +1,6 @@ #pragma once -#ifndef FACTION_CAMP_H -#define FACTION_CAMP_H +#ifndef CATA_SRC_FACTION_CAMP_H +#define CATA_SRC_FACTION_CAMP_H #include #include @@ -53,4 +53,4 @@ std::vector> om_building_region( const tripoint /// Returns the x and y coordinates of ( omt_tar - omt_pos ), clamped to [-1, 1] point om_simple_dir( const tripoint &omt_pos, const tripoint &omt_tar ); } // namespace talk_function -#endif +#endif // CATA_SRC_FACTION_CAMP_H diff --git a/src/fault.h b/src/fault.h index 0dbec2f9a7c08..70cbfe47cb731 100644 --- a/src/fault.h +++ b/src/fault.h @@ -1,6 +1,6 @@ #pragma once -#ifndef FAULT_H -#define FAULT_H +#ifndef CATA_SRC_FAULT_H +#define CATA_SRC_FAULT_H #include #include @@ -82,4 +82,4 @@ class fault std::set flags; }; -#endif +#endif // CATA_SRC_FAULT_H diff --git a/src/field.h b/src/field.h index 7b4222babe560..441fa29dd167a 100644 --- a/src/field.h +++ b/src/field.h @@ -1,6 +1,6 @@ #pragma once -#ifndef FIELD_H -#define FIELD_H +#ifndef CATA_SRC_FIELD_H +#define CATA_SRC_FIELD_H #include #include @@ -200,4 +200,4 @@ class field field_type_id _displayed_field_type; }; -#endif +#endif // CATA_SRC_FIELD_H diff --git a/src/field_type.h b/src/field_type.h index 763920508ff61..b2a91eb605fa2 100644 --- a/src/field_type.h +++ b/src/field_type.h @@ -1,6 +1,6 @@ #pragma once -#ifndef FIELD_TYPE_H -#define FIELD_TYPE_H +#ifndef CATA_SRC_FIELD_TYPE_H +#define CATA_SRC_FIELD_TYPE_H #include #include @@ -319,4 +319,4 @@ extern field_type_id fd_null, fd_tindalos_rift ; -#endif +#endif // CATA_SRC_FIELD_TYPE_H diff --git a/src/filesystem.h b/src/filesystem.h index 7e0d146126a45..45c9d382844c9 100644 --- a/src/filesystem.h +++ b/src/filesystem.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CATA_FILE_SYSTEM_H -#define CATA_FILE_SYSTEM_H +#ifndef CATA_SRC_FILESYSTEM_H +#define CATA_SRC_FILESYSTEM_H #include #include @@ -60,4 +60,4 @@ bool copy_file( const std::string &source_path, const std::string &dest_path ); */ std::string ensure_valid_file_name( const std::string &file_name ); -#endif //CATA_FILE_SYSTEM_H +#endif // CATA_SRC_FILESYSTEM_H diff --git a/src/fire.h b/src/fire.h index ea919a4bd4b31..5f4b481c72968 100644 --- a/src/fire.h +++ b/src/fire.h @@ -1,6 +1,6 @@ #pragma once -#ifndef FIRE_H -#define FIRE_H +#ifndef CATA_SRC_FIRE_H +#define CATA_SRC_FIRE_H #include "units.h" @@ -56,4 +56,4 @@ struct mat_burn_data { float burn = 0.0f; }; -#endif +#endif // CATA_SRC_FIRE_H diff --git a/src/flag.h b/src/flag.h index 19b6fc2c03442..e3d6d6515fcb6 100644 --- a/src/flag.h +++ b/src/flag.h @@ -1,6 +1,6 @@ #pragma once -#ifndef FLAG_H -#define FLAG_H +#ifndef CATA_SRC_FLAG_H +#define CATA_SRC_FLAG_H #include #include @@ -71,4 +71,4 @@ class json_flag static void reset(); }; -#endif +#endif // CATA_SRC_FLAG_H diff --git a/src/flat_set.h b/src/flat_set.h index 55806ed969c68..33a593dc99ef4 100644 --- a/src/flat_set.h +++ b/src/flat_set.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CATA_FLAT_SET -#define CATA_FLAT_SET +#ifndef CATA_SRC_FLAT_SET_H +#define CATA_SRC_FLAT_SET_H #include #include @@ -216,4 +216,4 @@ class flat_set : private Compare, Data } // namespace cata -#endif // CATA_FLAT_SET +#endif // CATA_SRC_FLAT_SET_H diff --git a/src/flood_fill.h b/src/flood_fill.h index 856e87fbac08e..595266242754f 100644 --- a/src/flood_fill.h +++ b/src/flood_fill.h @@ -1,6 +1,6 @@ #pragma once -#ifndef FLOOD_FILL_H -#define FLOOD_FILL_H +#ifndef CATA_SRC_FLOOD_FILL_H +#define CATA_SRC_FLOOD_FILL_H #include #include @@ -52,4 +52,4 @@ std::vector point_flood_fill_4_connected( const point &starting_point, } } // namespace ff -#endif +#endif // CATA_SRC_FLOOD_FILL_H diff --git a/src/font_loader.h b/src/font_loader.h index 817b28f804cbf..7ed514ad99993 100644 --- a/src/font_loader.h +++ b/src/font_loader.h @@ -1,6 +1,6 @@ #pragma once -#ifndef FONT_LOADER_H -#define FONT_LOADER_H +#ifndef CATA_SRC_FONT_LOADER_H +#define CATA_SRC_FONT_LOADER_H #include #include @@ -99,4 +99,4 @@ class font_loader } }; -#endif +#endif // CATA_SRC_FONT_LOADER_H diff --git a/src/fragment_cloud.h b/src/fragment_cloud.h index 1d43dc2401ca8..ad29d18923605 100644 --- a/src/fragment_cloud.h +++ b/src/fragment_cloud.h @@ -1,6 +1,6 @@ #pragma once -#ifndef FRAGMENT_CLOUD_H -#define FRAGMENT_CLOUD_H +#ifndef CATA_SRC_FRAGMENT_CLOUD_H +#define CATA_SRC_FRAGMENT_CLOUD_H enum class quadrant; /* @@ -30,4 +30,4 @@ fragment_cloud accumulate_fragment_cloud( const fragment_cloud &cumulative_cloud const fragment_cloud ¤t_cloud, const int &distance ); -#endif /* FRAGMENT_CLOUD_H */ +#endif // CATA_SRC_FRAGMENT_CLOUD_H diff --git a/src/fungal_effects.h b/src/fungal_effects.h index 27eb8ad22db0f..13887d6b9abae 100644 --- a/src/fungal_effects.h +++ b/src/fungal_effects.h @@ -1,6 +1,6 @@ #pragma once -#ifndef FUNGAL_EFFECTS_H -#define FUNGAL_EFFECTS_H +#ifndef CATA_SRC_FUNGAL_EFFECTS_H +#define CATA_SRC_FUNGAL_EFFECTS_H struct tripoint; class map; @@ -27,4 +27,4 @@ class fungal_effects void spread_fungus_one_tile( const tripoint &p, int growth ); }; -#endif +#endif // CATA_SRC_FUNGAL_EFFECTS_H diff --git a/src/game.cpp b/src/game.cpp index 392c27eb9e9e7..d666df11a42a7 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -2676,7 +2676,7 @@ void game::death_screen() { gamemode->game_over(); Messages::display_messages(); - show_scores_ui( stats(), get_kill_tracker() ); + show_scores_ui( *achievements_tracker_ptr, stats(), get_kill_tracker() ); disp_NPC_epilogues(); follower_ids.clear(); display_faction_epilogues(); @@ -5027,7 +5027,7 @@ void game::save_cyborg( item *cyborg, const tripoint &couch_pos, player &install load_npcs(); } else { - const int failure_level = static_cast( sqrt( abs( success ) * 4.0 * difficulty / + const int failure_level = static_cast( std::sqrt( std::abs( success ) * 4.0 * difficulty / adjusted_skill ) ); const int fail_type = std::min( 5, failure_level ); switch( fail_type ) { @@ -9033,7 +9033,7 @@ bool game::walk_move( const tripoint &dest_loc ) } const double base_moves = u.run_cost( mcost, diag ) * 100.0 / crit->get_speed(); const double encumb_moves = u.get_weight() / 4800.0_gram; - u.moves -= static_cast( ceil( base_moves + encumb_moves ) ); + u.moves -= static_cast( std::ceil( base_moves + encumb_moves ) ); if( u.movement_mode_is( CMM_WALK ) ) { crit->use_mech_power( -2 ); } else if( u.movement_mode_is( CMM_CROUCH ) ) { @@ -9778,7 +9778,7 @@ bool game::grabbed_furn_move( const tripoint &dp ) if( shifting_furniture ) { // We didn't move tripoint d_sum = u.grab_point + dp; - if( abs( d_sum.x ) < 2 && abs( d_sum.y ) < 2 ) { + if( std::abs( d_sum.x ) < 2 && std::abs( d_sum.y ) < 2 ) { u.grab_point = d_sum; // furniture moved relative to us } else { // we pushed furniture out of reach add_msg( _( "You let go of the %s." ), furntype.name() ); @@ -10253,7 +10253,7 @@ void game::vertical_move( int movez, bool force ) std::vector> npcs_to_bring; std::vector monsters_following; - if( !m.has_zlevels() && abs( movez ) == 1 ) { + if( !m.has_zlevels() && std::abs( movez ) == 1 ) { std::copy_if( active_npc.begin(), active_npc.end(), back_inserter( npcs_to_bring ), [this]( const shared_ptr_fast &np ) { return np->is_walking_with() && !np->is_mounted() && !np->in_sleep_state() && @@ -10261,7 +10261,7 @@ void game::vertical_move( int movez, bool force ) } ); } - if( m.has_zlevels() && abs( movez ) == 1 ) { + if( m.has_zlevels() && std::abs( movez ) == 1 ) { bool ladder = m.has_flag( "DIFFICULT_Z", u.pos() ); for( monster &critter : all_monsters() ) { if( ladder && !critter.climbs() ) { diff --git a/src/game.h b/src/game.h index fe5733b5561eb..8859f54c0cbb5 100644 --- a/src/game.h +++ b/src/game.h @@ -1,6 +1,6 @@ #pragma once -#ifndef GAME_H -#define GAME_H +#ifndef CATA_SRC_GAME_H +#define CATA_SRC_GAME_H #include #include @@ -1081,4 +1081,4 @@ int get_heat_radiation( const tripoint &location, bool direct ); // Returns temperature modifier from hot air fields of given location int get_convection_temperature( const tripoint &location ); -#endif +#endif // CATA_SRC_GAME_H diff --git a/src/game_constants.h b/src/game_constants.h index 6bdcb9bc4eec0..2f23b17083772 100644 --- a/src/game_constants.h +++ b/src/game_constants.h @@ -1,6 +1,6 @@ #pragma once -#ifndef GAME_CONSTANTS_H -#define GAME_CONSTANTS_H +#ifndef CATA_SRC_GAME_CONSTANTS_H +#define CATA_SRC_GAME_CONSTANTS_H #include "units.h" @@ -181,4 +181,4 @@ constexpr float very_obese = 35.0f; constexpr float morbidly_obese = 40.0f; } // namespace character_weight_category -#endif +#endif // CATA_SRC_GAME_CONSTANTS_H diff --git a/src/game_inventory.h b/src/game_inventory.h index ce5e52b07ad2c..7b8654cc79461 100644 --- a/src/game_inventory.h +++ b/src/game_inventory.h @@ -1,6 +1,6 @@ #pragma once -#ifndef GAME_INVENTORY_H -#define GAME_INVENTORY_H +#ifndef CATA_SRC_GAME_INVENTORY_H +#define CATA_SRC_GAME_INVENTORY_H #include #include @@ -118,4 +118,4 @@ item_location sterilize_cbm( player &p ); } // namespace game_menus -#endif // GAME_INVENTORY_H +#endif // CATA_SRC_GAME_INVENTORY_H diff --git a/src/game_ui.h b/src/game_ui.h index a61f6508905ee..07b6e2cc34c04 100644 --- a/src/game_ui.h +++ b/src/game_ui.h @@ -1,6 +1,6 @@ #pragma once -#ifndef GAME_UI_H -#define GAME_UI_H +#ifndef CATA_SRC_GAME_UI_H +#define CATA_SRC_GAME_UI_H namespace game_ui { @@ -15,4 +15,4 @@ void from_map_font_dimension( int &w, int &h ); void to_overmap_font_dimension( int &w, int &h ); void reinitialize_framebuffer(); -#endif // GAME_UI_H +#endif // CATA_SRC_GAME_UI_H diff --git a/src/gamemode.h b/src/gamemode.h index fcd21b7c41b1e..a1d37c2b1f7e9 100644 --- a/src/gamemode.h +++ b/src/gamemode.h @@ -1,6 +1,6 @@ #pragma once -#ifndef GAMEMODE_H -#define GAMEMODE_H +#ifndef CATA_SRC_GAMEMODE_H +#define CATA_SRC_GAMEMODE_H #include #include @@ -34,4 +34,4 @@ struct special_game { }; -#endif // GAMEMODE_H +#endif // CATA_SRC_GAMEMODE_H diff --git a/src/gamemode_defense.h b/src/gamemode_defense.h index a7ee32945906c..20232fb614743 100644 --- a/src/gamemode_defense.h +++ b/src/gamemode_defense.h @@ -1,6 +1,6 @@ #pragma once -#ifndef GAMEMODE_DEFENSE_H -#define GAMEMODE_DEFENSE_H +#ifndef CATA_SRC_GAMEMODE_DEFENSE_H +#define CATA_SRC_GAMEMODE_DEFENSE_H #include #include @@ -131,4 +131,4 @@ struct defense_game : public special_game { overmap_special_id defloc_special; }; -#endif // GAMEMODE_DEFENSE_H +#endif // CATA_SRC_GAMEMODE_DEFENSE_H diff --git a/src/gamemode_tutorial.h b/src/gamemode_tutorial.h index ddb3e3ed690a6..2e1646d939ac0 100644 --- a/src/gamemode_tutorial.h +++ b/src/gamemode_tutorial.h @@ -1,6 +1,6 @@ #pragma once -#ifndef GAMEMODE_TUTORIAL_H -#define GAMEMODE_TUTORIAL_H +#ifndef CATA_SRC_GAMEMODE_TUTORIAL_H +#define CATA_SRC_GAMEMODE_TUTORIAL_H #include #include @@ -72,4 +72,4 @@ struct tutorial_game : public special_game { std::map tutorials_seen; }; -#endif // GAMEMODE_TUTORIAL_H +#endif // CATA_SRC_GAMEMODE_TUTORIAL_H diff --git a/src/gates.h b/src/gates.h index 477212d5c84ee..ee1496549f978 100644 --- a/src/gates.h +++ b/src/gates.h @@ -1,6 +1,6 @@ #pragma once -#ifndef GATES_H -#define GATES_H +#ifndef CATA_SRC_GATES_H +#define CATA_SRC_GATES_H #include @@ -35,4 +35,4 @@ void close_door( map &m, Character &who, const tripoint &closep ); } // namespace doors -#endif +#endif // CATA_SRC_GATES_H diff --git a/src/generic_factory.h b/src/generic_factory.h index 196e4cd5a2e05..a6883545ffca4 100644 --- a/src/generic_factory.h +++ b/src/generic_factory.h @@ -1,6 +1,6 @@ #pragma once -#ifndef GENERIC_FACTORY_H -#define GENERIC_FACTORY_H +#ifndef CATA_SRC_GENERIC_FACTORY_H +#define CATA_SRC_GENERIC_FACTORY_H #include #include @@ -986,4 +986,4 @@ inline bool legacy_volume_reader( const JsonObject &jo, const std::string &membe return true; } -#endif +#endif // CATA_SRC_GENERIC_FACTORY_H diff --git a/src/get_version.h b/src/get_version.h index 4e043fdb61c3f..99ce07f168252 100644 --- a/src/get_version.h +++ b/src/get_version.h @@ -1,5 +1,5 @@ #pragma once -#ifndef GET_VERSION_H -#define GET_VERSION_H +#ifndef CATA_SRC_GET_VERSION_H +#define CATA_SRC_GET_VERSION_H const char *getVersionString(); -#endif +#endif // CATA_SRC_GET_VERSION_H diff --git a/src/grab.cpp b/src/grab.cpp index 36002cdd425d0..0a8b784d4dbcf 100644 --- a/src/grab.cpp +++ b/src/grab.cpp @@ -55,7 +55,7 @@ bool game::grabbed_veh_move( const tripoint &dp ) if( dp == prev_grab ) { // We are pushing in the direction of vehicle dp_veh = dp; - } else if( abs( dp.x + dp_veh.x ) != 2 && abs( dp.y + dp_veh.y ) != 2 ) { + } else if( std::abs( dp.x + dp_veh.x ) != 2 && std::abs( dp.y + dp_veh.y ) != 2 ) { // Not actually moving the vehicle, don't do the checks u.grab_point = -( dp + dp_veh ); return false; diff --git a/src/gun_mode.h b/src/gun_mode.h index ef12689238041..f802ece21297e 100644 --- a/src/gun_mode.h +++ b/src/gun_mode.h @@ -1,6 +1,6 @@ #pragma once -#ifndef GUN_MODE_H -#define GUN_MODE_H +#ifndef CATA_SRC_GUN_MODE_H +#define CATA_SRC_GUN_MODE_H #include #include @@ -61,4 +61,4 @@ class gun_mode } }; -#endif +#endif // CATA_SRC_GUN_MODE_H diff --git a/src/handle_action.cpp b/src/handle_action.cpp index 4d7ad6620e182..36ad9b1b5afac 100644 --- a/src/handle_action.cpp +++ b/src/handle_action.cpp @@ -604,17 +604,17 @@ static void handbrake() vehicle *const veh = &vp->vehicle(); add_msg( _( "You pull a handbrake." ) ); veh->cruise_velocity = 0; - if( veh->last_turn != 0 && rng( 15, 60 ) * 100 < abs( veh->velocity ) ) { + if( veh->last_turn != 0 && rng( 15, 60 ) * 100 < std::abs( veh->velocity ) ) { veh->skidding = true; add_msg( m_warning, _( "You lose control of %s." ), veh->name ); veh->turn( veh->last_turn > 0 ? 60 : -60 ); } else { - int braking_power = abs( veh->velocity ) / 2 + 10 * 100; - if( abs( veh->velocity ) < braking_power ) { + int braking_power = std::abs( veh->velocity ) / 2 + 10 * 100; + if( std::abs( veh->velocity ) < braking_power ) { veh->stop(); } else { int sgn = veh->velocity > 0 ? 1 : -1; - veh->velocity = sgn * ( abs( veh->velocity ) - braking_power ); + veh->velocity = sgn * ( std::abs( veh->velocity ) - braking_power ); } } g->u.moves = 0; @@ -2298,7 +2298,7 @@ bool game::handle_action() break; case ACTION_SCORES: - show_scores_ui( stats(), get_kill_tracker() ); + show_scores_ui( *achievements_tracker_ptr, stats(), get_kill_tracker() ); break; case ACTION_FACTIONS: diff --git a/src/handle_liquid.h b/src/handle_liquid.h index cd7bb94cb28cd..36230171de057 100644 --- a/src/handle_liquid.h +++ b/src/handle_liquid.h @@ -1,6 +1,6 @@ #pragma once -#ifndef HANDLE_LIQUID_H -#define HANDLE_LIQUID_H +#ifndef CATA_SRC_HANDLE_LIQUID_H +#define CATA_SRC_HANDLE_LIQUID_H #include "item_location.h" #include "item_stack.h" @@ -112,4 +112,4 @@ bool handle_liquid( item &liquid, item *source = nullptr, int radius = 0, const monster *source_mon = nullptr ); } // namespace liquid_handler -#endif +#endif // CATA_SRC_HANDLE_LIQUID_H diff --git a/src/harvest.h b/src/harvest.h index 704c75c503da1..ab6e442125acf 100644 --- a/src/harvest.h +++ b/src/harvest.h @@ -1,6 +1,6 @@ #pragma once -#ifndef HARVEST_H -#define HARVEST_H +#ifndef CATA_SRC_HARVEST_H +#define CATA_SRC_HARVEST_H #include #include @@ -92,4 +92,4 @@ class harvest_list void finalize(); }; -#endif +#endif // CATA_SRC_HARVEST_H diff --git a/src/hash_utils.h b/src/hash_utils.h index 98aba822cccec..55b48a4dabadd 100644 --- a/src/hash_utils.h +++ b/src/hash_utils.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CATA_TUPLE_HASH_H -#define CATA_TUPLE_HASH_H +#ifndef CATA_SRC_HASH_UTILS_H +#define CATA_SRC_HASH_UTILS_H #include @@ -88,4 +88,4 @@ struct range_hash { } // namespace cata -#endif // CATA_TUPLE_HASH_H +#endif // CATA_SRC_HASH_UTILS_H diff --git a/src/help.h b/src/help.h index 7bd85bcd53e3d..e2a1a856d7995 100644 --- a/src/help.h +++ b/src/help.h @@ -1,6 +1,6 @@ #pragma once -#ifndef HELP_H -#define HELP_H +#ifndef CATA_SRC_HELP_H +#define CATA_SRC_HELP_H #include #include @@ -34,4 +34,4 @@ help &get_help(); std::string get_hint(); -#endif +#endif // CATA_SRC_HELP_H diff --git a/src/iexamine.cpp b/src/iexamine.cpp index f944eb88359f0..bc2e400743c45 100644 --- a/src/iexamine.cpp +++ b/src/iexamine.cpp @@ -1824,7 +1824,7 @@ static bool harvest_common( player &p, const tripoint &examp, bool furn, bool ne for( const auto &entry : harvest ) { float min_num = entry.base_num.first + lev * entry.scale_num.first; float max_num = entry.base_num.second + lev * entry.scale_num.second; - int roll = std::min( entry.max, round( rng_float( min_num, max_num ) ) ); + int roll = std::min( entry.max, std::round( rng_float( min_num, max_num ) ) ); if( roll >= 1 ) { got_anything = true; for( int i = 0; i < roll; i++ ) { diff --git a/src/iexamine.h b/src/iexamine.h index 54a723da5e499..4f8f2ef6acecc 100644 --- a/src/iexamine.h +++ b/src/iexamine.h @@ -1,6 +1,6 @@ #pragma once -#ifndef IEXAMINE_H -#define IEXAMINE_H +#ifndef CATA_SRC_IEXAMINE_H +#define CATA_SRC_IEXAMINE_H #include #include @@ -140,4 +140,4 @@ void practice_survival_while_foraging( player *p ); using iexamine_function = void ( * )( player &, const tripoint & ); iexamine_function iexamine_function_from_string( const std::string &function_name ); -#endif +#endif // CATA_SRC_IEXAMINE_H diff --git a/src/ime.h b/src/ime.h index 9e6325886c051..c6daf0032aac5 100644 --- a/src/ime.h +++ b/src/ime.h @@ -1,6 +1,6 @@ #pragma once -#ifndef IME_H -#define IME_H +#ifndef CATA_SRC_IME_H +#define CATA_SRC_IME_H /** * Enable or disable IME for text/keyboard input @@ -26,4 +26,4 @@ class ime_sentry bool previously_enabled; }; -#endif +#endif // CATA_SRC_IME_H diff --git a/src/init.h b/src/init.h index f0893cb690868..62502b16c5dc3 100644 --- a/src/init.h +++ b/src/init.h @@ -1,6 +1,6 @@ #pragma once -#ifndef INIT_H -#define INIT_H +#ifndef CATA_SRC_INIT_H +#define CATA_SRC_INIT_H #include #include @@ -163,4 +163,4 @@ class DynamicDataLoader } }; -#endif +#endif // CATA_SRC_INIT_H diff --git a/src/input.cpp b/src/input.cpp index fcac31418f167..0ac296cf9f42a 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -1023,9 +1023,9 @@ action_id input_context::display_menu( const bool permit_execute_action ) size_t legwidth = 0; string_input_popup spopup; const auto recalc_size = [&]( ui_adaptor & ui ) { - int maxwidth = max( FULL_SCREEN_WIDTH, TERMX ); + int maxwidth = std::max( FULL_SCREEN_WIDTH, TERMX ); width = min( 80, maxwidth ); - int maxheight = max( FULL_SCREEN_HEIGHT, TERMY ); + int maxheight = std::max( FULL_SCREEN_HEIGHT, TERMY ); height = min( maxheight, static_cast( hotkeys.size() ) + LEGEND_HEIGHT + BORDER_SPACE ); w_help = catacurses::newwin( height - 2, width - 2, diff --git a/src/input.h b/src/input.h index a20b4b5a7d56b..858487b773089 100644 --- a/src/input.h +++ b/src/input.h @@ -1,6 +1,6 @@ #pragma once -#ifndef INPUT_H -#define INPUT_H +#ifndef CATA_SRC_INPUT_H +#define CATA_SRC_INPUT_H #include #include @@ -742,4 +742,4 @@ bool gamepad_available(); // rotate a delta direction clockwise void rotate_direction_cw( int &dx, int &dy ); -#endif +#endif // CATA_SRC_INPUT_H diff --git a/src/int_id.h b/src/int_id.h index d332c87abe586..9dde61fcbdff1 100644 --- a/src/int_id.h +++ b/src/int_id.h @@ -1,6 +1,6 @@ #pragma once -#ifndef INT_ID_H -#define INT_ID_H +#ifndef CATA_SRC_INT_ID_H +#define CATA_SRC_INT_ID_H #include #include @@ -128,4 +128,4 @@ struct hash< int_id > { }; } // namespace std -#endif +#endif // CATA_SRC_INT_ID_H diff --git a/src/inventory.cpp b/src/inventory.cpp index aca0b005c39b3..a7ef5d0542694 100644 --- a/src/inventory.cpp +++ b/src/inventory.cpp @@ -858,15 +858,15 @@ item *inventory::most_appropriate_painkiller( int pain ) int diff = 9999; itype_id type = elem.front().typeId(); if( type == "aspirin" ) { - diff = abs( pain - 15 ); + diff = std::abs( pain - 15 ); } else if( type == "codeine" ) { - diff = abs( pain - 30 ); + diff = std::abs( pain - 30 ); } else if( type == "oxycodone" ) { - diff = abs( pain - 60 ); + diff = std::abs( pain - 60 ); } else if( type == "heroin" ) { - diff = abs( pain - 100 ); + diff = std::abs( pain - 100 ); } else if( type == "tramadol" ) { - diff = abs( pain - 40 ) / 2; // Bonus since it's long-acting + diff = std::abs( pain - 40 ) / 2; // Bonus since it's long-acting } if( diff < difference ) { diff --git a/src/inventory.h b/src/inventory.h index 60ab6d47997d7..a7aed98076f42 100644 --- a/src/inventory.h +++ b/src/inventory.h @@ -1,6 +1,6 @@ #pragma once -#ifndef INVENTORY_H -#define INVENTORY_H +#ifndef CATA_SRC_INVENTORY_H +#define CATA_SRC_INVENTORY_H #include #include @@ -247,4 +247,4 @@ class inventory : public visitable mutable itype_bin binned_items; }; -#endif +#endif // CATA_SRC_INVENTORY_H diff --git a/src/inventory_ui.h b/src/inventory_ui.h index 331f4e2d21a2f..8a2c7c9080de1 100644 --- a/src/inventory_ui.h +++ b/src/inventory_ui.h @@ -1,6 +1,6 @@ #pragma once -#ifndef INVENTORY_UI_H -#define INVENTORY_UI_H +#ifndef CATA_SRC_INVENTORY_UI_H +#define CATA_SRC_INVENTORY_UI_H #include #include @@ -703,4 +703,4 @@ class inventory_drop_selector : public inventory_multiselector size_t max_chosen_count; }; -#endif +#endif // CATA_SRC_INVENTORY_UI_H diff --git a/src/io_tags.h b/src/io_tags.h index e278089c262df..c101f65cce407 100644 --- a/src/io_tags.h +++ b/src/io_tags.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CATA_IO_TAGS_H -#define CATA_IO_TAGS_H +#ifndef CATA_SRC_IO_TAGS_H +#define CATA_SRC_IO_TAGS_H namespace io { @@ -28,4 +28,4 @@ struct object_archive_tag { } // namespace io -#endif // CATA_IO_TAGS_H +#endif // CATA_SRC_IO_TAGS_H diff --git a/src/item.cpp b/src/item.cpp index 962d4c4eafaea..d7187efb53f88 100644 --- a/src/item.cpp +++ b/src/item.cpp @@ -572,7 +572,7 @@ item &item::ammo_set( const itype_id &ammo, int qty ) } // handle reloadable tools and guns with no specific ammo type as special case - if( ( ammo == "null" && ammo_types().empty() ) || is_money() ) { + if( ( ( ammo == "null" || ammo == "NULL" ) && ammo_types().empty() ) || is_money() ) { if( ( is_tool() || is_gun() ) && magazine_integral() ) { curammo = nullptr; charges = std::min( qty, ammo_capacity() ); @@ -1563,7 +1563,7 @@ void item::med_info( const item *med_item, std::vector &info, const it if( parts->test( iteminfo_parts::MED_PORTIONS ) ) { info.push_back( iteminfo( "MED", _( "Portions: " ), - abs( static_cast( med_item->charges ) * batch ) ) ); + std::abs( static_cast( med_item->charges ) * batch ) ) ); } if( med_com->addict && parts->test( iteminfo_parts::DESCRIPTION_MED_ADDICTING ) ) { @@ -1620,7 +1620,7 @@ void item::food_info( const item *food_item, std::vector &info, if( parts->test( iteminfo_parts::FOOD_PORTIONS ) ) { info.push_back( iteminfo( "FOOD", _( "Portions: " ), - abs( static_cast( food_item->charges ) * batch ) ) ); + std::abs( static_cast( food_item->charges ) * batch ) ) ); } if( food_item->corpse != nullptr && parts->test( iteminfo_parts::FOOD_SMELL ) && ( debug || ( g != nullptr && ( g->u.has_trait( trait_CARNIVORE ) || @@ -2008,7 +2008,7 @@ void item::gun_info( const item *mod, std::vector &info, const iteminf return e.second.qty > 1 && !e.second.melee(); } ) ) { info.emplace_back( "GUN", _( "Recommended strength (burst): " ), "", - iteminfo::lower_is_better, ceil( mod->type->weight / 333.0_gram ) ); + iteminfo::lower_is_better, std::ceil( mod->type->weight / 333.0_gram ) ); } if( parts->test( iteminfo_parts::GUN_RELOAD_TIME ) ) { @@ -6519,7 +6519,7 @@ double item::calculate_by_enchantment( const Character &owner, double modify, modify += add_value; modify *= mult_value; if( round_value ) { - modify = round( modify ); + modify = std::round( modify ); } return modify; } @@ -6538,7 +6538,7 @@ double item::calculate_by_enchantment_wield( double modify, enchantment::mod val modify += add_value; modify *= mult_value; if( round_value ) { - modify = round( modify ); + modify = std::round( modify ); } return modify; } @@ -6852,7 +6852,7 @@ int item::gun_recoil( const player &p, bool bipod ) const handling /= 10; // algorithm is biased so heavier weapons benefit more from improved handling - handling = pow( wt, 0.8 ) * pow( handling, 1.2 ); + handling = std::pow( wt, 0.8 ) * std::pow( handling, 1.2 ); int qty = type->gun->recoil; if( ammo_data() ) { @@ -8002,6 +8002,7 @@ bool item::use_amount( const itype_id &it, int &quantity, std::list &used, { // Remember quantity so that we can unseal self int old_quantity = quantity; + std::vector removed_items; // First, check contents visit_items( [&]( item * a ) { @@ -8010,12 +8011,16 @@ bool item::use_amount( const itype_id &it, int &quantity, std::list &used, return VisitResponse::NEXT; } if( a->use_amount_internal( it, quantity, used, filter ) ) { - this->remove_item( *a ); + removed_items.emplace_back( a ); return VisitResponse::SKIP; } return VisitResponse::NEXT; } ); + for( item *remove : removed_items ) { + remove_item( *remove ); + } + if( quantity != old_quantity ) { on_contents_changed(); } @@ -8048,7 +8053,10 @@ bool item::allow_crafting_component() const // fixes #18886 - turret installation may require items with irremovable mods if( is_gun() ) { bool valid = true; - visit_items( [&valid]( const item * it ) { + visit_items( [&]( const item * it ) { + if( this == it ) { + return VisitResponse::NEXT; + } if( !( it->is_magazine() || ( it->is_gunmod() && it->is_irremovable() ) ) ) { valid = false; return VisitResponse::ABORT; @@ -8798,7 +8806,7 @@ void item::calc_temp( const int temp, const float insulation, const time_point & if( 0.00001 * specific_energy < completely_frozen_specific_energy ) { // Was solid. new_item_temperature = ( - temperature_difference - * exp( - to_turns( time_delta ) * conductivity_term / ( mass * specific_heat_solid ) ) + * std::exp( - to_turns( time_delta ) * conductivity_term / ( mass * specific_heat_solid ) ) + env_temperature ); new_specific_energy = new_item_temperature * specific_heat_solid; if( new_item_temperature > freezing_temperature + 0.5 ) { @@ -8807,7 +8815,7 @@ void item::calc_temp( const int temp, const float insulation, const time_point & // Calculate how long the item was solid // and apply rest of the time as melting extra_time = to_turns( time_delta ) - - log( - temperature_difference / ( freezing_temperature - env_temperature ) ) + - std::log( - temperature_difference / ( freezing_temperature - env_temperature ) ) * ( mass * specific_heat_solid / conductivity_term ); new_specific_energy = completely_frozen_specific_energy + conductivity_term @@ -8825,8 +8833,8 @@ void item::calc_temp( const int temp, const float insulation, const time_point & } else if( 0.00001 * specific_energy > completely_liquid_specific_energy ) { // Was liquid. new_item_temperature = ( - temperature_difference - * exp( - to_turns( time_delta ) * conductivity_term / ( mass * - specific_heat_liquid ) ) + * std::exp( - to_turns( time_delta ) * conductivity_term / ( mass * + specific_heat_liquid ) ) + env_temperature ); new_specific_energy = ( new_item_temperature - freezing_temperature ) * specific_heat_liquid + completely_liquid_specific_energy; @@ -8836,7 +8844,7 @@ void item::calc_temp( const int temp, const float insulation, const time_point & // Calculate how long the item was liquid // and apply rest of the time as freezing extra_time = to_turns( time_delta ) - - log( - temperature_difference / ( freezing_temperature - env_temperature ) ) + - std::log( - temperature_difference / ( freezing_temperature - env_temperature ) ) * ( mass * specific_heat_liquid / conductivity_term ); new_specific_energy = completely_liquid_specific_energy + conductivity_term @@ -8864,8 +8872,8 @@ void item::calc_temp( const int temp, const float insulation, const time_point & * ( completely_liquid_specific_energy - 0.00001 * specific_energy ); new_item_temperature = ( ( freezing_temperature - env_temperature ) - * exp( - extra_time * conductivity_term / ( mass * - specific_heat_liquid ) ) + * std::exp( - extra_time * conductivity_term / ( mass * + specific_heat_liquid ) ) + env_temperature ); new_specific_energy = ( new_item_temperature - freezing_temperature ) * specific_heat_liquid + completely_liquid_specific_energy; @@ -8877,8 +8885,8 @@ void item::calc_temp( const int temp, const float insulation, const time_point & * ( completely_frozen_specific_energy - 0.00001 * specific_energy ); new_item_temperature = ( ( freezing_temperature - env_temperature ) - * exp( - extra_time * conductivity_term / ( mass * - specific_heat_solid ) ) + * std::exp( - extra_time * conductivity_term / ( mass * + specific_heat_solid ) ) + env_temperature ); new_specific_energy = new_item_temperature * specific_heat_solid; } diff --git a/src/item.h b/src/item.h index b0768fd122aac..bebf429e1f0dd 100644 --- a/src/item.h +++ b/src/item.h @@ -1,6 +1,6 @@ #pragma once -#ifndef ITEM_H -#define ITEM_H +#ifndef CATA_SRC_ITEM_H +#define CATA_SRC_ITEM_H #include #include @@ -2258,4 +2258,4 @@ inline bool is_crafting_component( const item &component ) !component.is_filthy(); } -#endif +#endif // CATA_SRC_ITEM_H diff --git a/src/item_action.h b/src/item_action.h index fa966dd74590d..b1df3cc60822c 100644 --- a/src/item_action.h +++ b/src/item_action.h @@ -1,6 +1,6 @@ #pragma once -#ifndef ITEM_ACTION_H -#define ITEM_ACTION_H +#ifndef CATA_SRC_ITEM_ACTION_H +#define CATA_SRC_ITEM_ACTION_H #include #include @@ -58,4 +58,4 @@ class item_action_generator void check_consistency() const; }; -#endif +#endif // CATA_SRC_ITEM_ACTION_H diff --git a/src/item_category.h b/src/item_category.h index 206d57953ec44..302e34b99b684 100644 --- a/src/item_category.h +++ b/src/item_category.h @@ -1,6 +1,6 @@ #pragma once -#ifndef ITEM_CATEGORY_H -#define ITEM_CATEGORY_H +#ifndef CATA_SRC_ITEM_CATEGORY_H +#define CATA_SRC_ITEM_CATEGORY_H #include #include @@ -82,5 +82,5 @@ class item_category void load( const JsonObject &jo, const std::string & ); }; -#endif +#endif // CATA_SRC_ITEM_CATEGORY_H diff --git a/src/item_contents.h b/src/item_contents.h index 90a2f8b35d41b..c1a3a944b7259 100644 --- a/src/item_contents.h +++ b/src/item_contents.h @@ -1,6 +1,6 @@ #pragma once -#ifndef ITEM_CONTENTS_H -#define ITEM_CONTENTS_H +#ifndef CATA_SRC_ITEM_CONTENTS_H +#define CATA_SRC_ITEM_CONTENTS_H #include #include @@ -103,4 +103,4 @@ class item_contents std::list items; }; -#endif +#endif // CATA_SRC_ITEM_CONTENTS_H diff --git a/src/item_factory.h b/src/item_factory.h index 6cc189925a700..73cb19a10333e 100644 --- a/src/item_factory.h +++ b/src/item_factory.h @@ -1,6 +1,6 @@ #pragma once -#ifndef ITEM_FACTORY_H -#define ITEM_FACTORY_H +#ifndef CATA_SRC_ITEM_FACTORY_H +#define CATA_SRC_ITEM_FACTORY_H #include #include @@ -369,4 +369,4 @@ class Item_factory std::set repair_actions; }; -#endif +#endif // CATA_SRC_ITEM_FACTORY_H diff --git a/src/item_group.h b/src/item_group.h index 066849040f4e4..1badea4caa7bc 100644 --- a/src/item_group.h +++ b/src/item_group.h @@ -1,6 +1,6 @@ #pragma once -#ifndef ITEM_GROUP_H -#define ITEM_GROUP_H +#ifndef CATA_SRC_ITEM_GROUP_H +#define CATA_SRC_ITEM_GROUP_H #include #include @@ -310,4 +310,4 @@ class Item_group : public Item_spawn_data prop_list items; }; -#endif +#endif // CATA_SRC_ITEM_GROUP_H diff --git a/src/item_location.h b/src/item_location.h index 3dee2a76aee53..9e36e12a8f7fc 100644 --- a/src/item_location.h +++ b/src/item_location.h @@ -1,6 +1,6 @@ #pragma once -#ifndef ITEM_LOCATION_H -#define ITEM_LOCATION_H +#ifndef CATA_SRC_ITEM_LOCATION_H +#define CATA_SRC_ITEM_LOCATION_H #include #include @@ -91,4 +91,4 @@ class item_location std::shared_ptr ptr; }; -#endif +#endif // CATA_SRC_ITEM_LOCATION_H diff --git a/src/item_search.h b/src/item_search.h index f7da1b005c8c5..0a2e5cd1f216e 100644 --- a/src/item_search.h +++ b/src/item_search.h @@ -1,6 +1,6 @@ #pragma once -#ifndef ITEM_SEARCH_H -#define ITEM_SEARCH_H +#ifndef CATA_SRC_ITEM_SEARCH_H +#define CATA_SRC_ITEM_SEARCH_H #include #include @@ -96,4 +96,4 @@ std::function item_filter_from_string( const std::string & */ std::function basic_item_filter( std::string filter ); -#endif +#endif // CATA_SRC_ITEM_SEARCH_H diff --git a/src/item_stack.h b/src/item_stack.h index 58da76cbf0c60..b8df981669fd7 100644 --- a/src/item_stack.h +++ b/src/item_stack.h @@ -1,6 +1,6 @@ #pragma once -#ifndef ITEM_STACK_H -#define ITEM_STACK_H +#ifndef CATA_SRC_ITEM_STACK_H +#define CATA_SRC_ITEM_STACK_H #include @@ -73,4 +73,4 @@ class item_stack const item *stacks_with( const item &it ) const; }; -#endif +#endif // CATA_SRC_ITEM_STACK_H diff --git a/src/iteminfo_query.h b/src/iteminfo_query.h index 3fd69441d76b8..8c00866b8ba70 100644 --- a/src/iteminfo_query.h +++ b/src/iteminfo_query.h @@ -1,6 +1,6 @@ #pragma once -#ifndef ITEMINFO_QUERY_H -#define ITEMINFO_QUERY_H +#ifndef CATA_SRC_ITEMINFO_QUERY_H +#define CATA_SRC_ITEMINFO_QUERY_H #include #include @@ -253,4 +253,4 @@ class iteminfo_query : public iteminfo_query_base static const iteminfo_query anyflags; }; -#endif +#endif // CATA_SRC_ITEMINFO_QUERY_H diff --git a/src/itype.h b/src/itype.h index d5c2f31434107..bc037e5822437 100644 --- a/src/itype.h +++ b/src/itype.h @@ -1,6 +1,6 @@ #pragma once -#ifndef ITYPE_H -#define ITYPE_H +#ifndef CATA_SRC_ITYPE_H +#define CATA_SRC_ITYPE_H #include #include @@ -1092,4 +1092,4 @@ struct itype { virtual ~itype() = default; }; -#endif +#endif // CATA_SRC_ITYPE_H diff --git a/src/iuse.cpp b/src/iuse.cpp index 5b8a8338ed09d..2850ab90ba320 100644 --- a/src/iuse.cpp +++ b/src/iuse.cpp @@ -440,9 +440,9 @@ static int alcohol( player &p, const item &it, const int strength ) 36_seconds, 1_minutes, 1_minutes ) * p.str_max ); // Metabolizing the booze improves the nutritional value; // might not be healthy, and still causes Thirst problems, though - p.stomach.mod_nutr( -( abs( it.get_comestible() ? it.type->comestible->stim : 0 ) ) ); + p.stomach.mod_nutr( -( std::abs( it.get_comestible() ? it.type->comestible->stim : 0 ) ) ); // Metabolizing it cancels out the depressant - p.mod_stim( abs( it.get_comestible() ? it.get_comestible()->stim : 0 ) ); + p.mod_stim( std::abs( it.get_comestible() ? it.get_comestible()->stim : 0 ) ); } else if( p.has_trait( trait_TOLERANCE ) ) { duration -= alc_strength( strength, 9_minutes, 16_minutes, 24_minutes ); } else if( p.has_trait( trait_LIGHTWEIGHT ) ) { @@ -5709,7 +5709,7 @@ int iuse::towel_common( player *p, item *it, bool t ) } // dry off from being wet - } else if( abs( p->has_morale( MORALE_WET ) ) ) { + } else if( std::abs( p->has_morale( MORALE_WET ) ) ) { p->rem_morale( MORALE_WET ); p->body_wetness.fill( 0 ); p->add_msg_if_player( _( "You use the %s to dry off, saturating it with water!" ), @@ -9314,7 +9314,7 @@ int iuse::weather_tool( player *p, item *it, bool, const tripoint & ) if( it->typeId() == "weather_reader" ) { int vehwindspeed = 0; if( optional_vpart_position vp = g->m.veh_at( p->pos() ) ) { - vehwindspeed = abs( vp->vehicle().velocity / 100 ); // For mph + vehwindspeed = std::abs( vp->vehicle().velocity / 100 ); // For mph } const oter_id &cur_om_ter = overmap_buffer.ter( p->global_omt_location() ); /* windpower defined in internal velocity units (=.01 mph) */ diff --git a/src/iuse.h b/src/iuse.h index 219eaa7d87d60..eba1e02f76572 100644 --- a/src/iuse.h +++ b/src/iuse.h @@ -1,6 +1,6 @@ #pragma once -#ifndef IUSE_H -#define IUSE_H +#ifndef CATA_SRC_IUSE_H +#define CATA_SRC_IUSE_H #include #include @@ -331,4 +331,4 @@ struct use_function { void dump_info( const item &, std::vector & ) const; }; -#endif +#endif // CATA_SRC_IUSE_H diff --git a/src/iuse_actor.cpp b/src/iuse_actor.cpp index 7213cfa0f470d..0b3ebaf4be601 100644 --- a/src/iuse_actor.cpp +++ b/src/iuse_actor.cpp @@ -1446,7 +1446,7 @@ int firestarter_actor::use( player &p, item &it, bool t, const tripoint &spos ) const int moves_base = moves_cost_by_fuel( pos ); const double moves_per_turn = to_moves( 1_turns ); const int min_moves = std::min( - moves_base, sqrt( 1 + moves_base / moves_per_turn ) * moves_per_turn ); + moves_base, std::sqrt( 1 + moves_base / moves_per_turn ) * moves_per_turn ); const int moves = std::max( min_moves, moves_base * moves_modifier ) / light; if( moves > to_moves( 1_minutes ) ) { // If more than 1 minute, inform the player diff --git a/src/iuse_actor.h b/src/iuse_actor.h index 1418c09cdfa18..9ceee17f4a982 100644 --- a/src/iuse_actor.h +++ b/src/iuse_actor.h @@ -1,6 +1,6 @@ #pragma once -#ifndef IUSE_ACTOR_H -#define IUSE_ACTOR_H +#ifndef CATA_SRC_IUSE_ACTOR_H +#define CATA_SRC_IUSE_ACTOR_H #include #include @@ -1208,4 +1208,4 @@ class sew_advanced_actor : public iuse_actor int use( player &, item &, bool, const tripoint & ) const override; std::unique_ptr clone() const override; }; -#endif +#endif // CATA_SRC_IUSE_ACTOR_H diff --git a/src/iuse_software.h b/src/iuse_software.h index e8bb46c862b6d..349afa74f017b 100644 --- a/src/iuse_software.h +++ b/src/iuse_software.h @@ -1,6 +1,6 @@ #pragma once -#ifndef IUSE_SOFTWARE_H -#define IUSE_SOFTWARE_H +#ifndef CATA_SRC_IUSE_SOFTWARE_H +#define CATA_SRC_IUSE_SOFTWARE_H #include #include @@ -9,4 +9,4 @@ bool play_videogame( const std::string &function_name, std::map &game_data, int &score ); -#endif +#endif // CATA_SRC_IUSE_SOFTWARE_H diff --git a/src/iuse_software_kitten.h b/src/iuse_software_kitten.h index 2052f542b3dbb..e2adc1791b822 100644 --- a/src/iuse_software_kitten.h +++ b/src/iuse_software_kitten.h @@ -1,6 +1,6 @@ #pragma once -#ifndef SOFTWARE_KITTEN_H -#define SOFTWARE_KITTEN_H +#ifndef CATA_SRC_IUSE_SOFTWARE_KITTEN_H +#define CATA_SRC_IUSE_SOFTWARE_KITTEN_H #include @@ -41,4 +41,4 @@ class robot_finds_kitten int bogus_messages[MAXMESSAGES]; }; -#endif +#endif // CATA_SRC_IUSE_SOFTWARE_KITTEN_H diff --git a/src/iuse_software_lightson.h b/src/iuse_software_lightson.h index 78d2915b39655..f4b4f7c7e7a11 100644 --- a/src/iuse_software_lightson.h +++ b/src/iuse_software_lightson.h @@ -1,6 +1,6 @@ #pragma once -#ifndef SOFTWARE_LIGHTSON_H -#define SOFTWARE_LIGHTSON_H +#ifndef CATA_SRC_IUSE_SOFTWARE_LIGHTSON_H +#define CATA_SRC_IUSE_SOFTWARE_LIGHTSON_H #include #include @@ -32,4 +32,4 @@ class lightson_game lightson_game() = default; }; -#endif +#endif // CATA_SRC_IUSE_SOFTWARE_LIGHTSON_H diff --git a/src/iuse_software_minesweeper.h b/src/iuse_software_minesweeper.h index 9d2b77bef363c..5a2ee3cb2b47b 100644 --- a/src/iuse_software_minesweeper.h +++ b/src/iuse_software_minesweeper.h @@ -1,6 +1,6 @@ #pragma once -#ifndef SOFTWARE_MINESWEEPER_H -#define SOFTWARE_MINESWEEPER_H +#ifndef CATA_SRC_IUSE_SOFTWARE_MINESWEEPER_H +#define CATA_SRC_IUSE_SOFTWARE_MINESWEEPER_H #include @@ -40,4 +40,4 @@ class minesweeper_game minesweeper_game(); }; -#endif +#endif // CATA_SRC_IUSE_SOFTWARE_MINESWEEPER_H diff --git a/src/iuse_software_snake.h b/src/iuse_software_snake.h index dca6f11e554f5..fd743c48c5e8a 100644 --- a/src/iuse_software_snake.h +++ b/src/iuse_software_snake.h @@ -1,6 +1,6 @@ #pragma once -#ifndef SOFTWARE_SNAKE_H -#define SOFTWARE_SNAKE_H +#ifndef CATA_SRC_IUSE_SOFTWARE_SNAKE_H +#define CATA_SRC_IUSE_SOFTWARE_SNAKE_H namespace catacurses { @@ -17,4 +17,4 @@ class snake_game int start_game(); }; -#endif +#endif // CATA_SRC_IUSE_SOFTWARE_SNAKE_H diff --git a/src/iuse_software_sokoban.h b/src/iuse_software_sokoban.h index f8960dc6c7c55..b711d91fa27c9 100644 --- a/src/iuse_software_sokoban.h +++ b/src/iuse_software_sokoban.h @@ -1,6 +1,6 @@ #pragma once -#ifndef SOFTWARE_SOKOBAN_H -#define SOFTWARE_SOKOBAN_H +#ifndef CATA_SRC_IUSE_SOFTWARE_SOKOBAN_H +#define CATA_SRC_IUSE_SOFTWARE_SOKOBAN_H #include #include @@ -59,4 +59,4 @@ class sokoban_game sokoban_game(); }; -#endif +#endif // CATA_SRC_IUSE_SOFTWARE_SOKOBAN_H diff --git a/src/json.h b/src/json.h index 4a3a8e4522560..fdedbb6750fae 100644 --- a/src/json.h +++ b/src/json.h @@ -1,6 +1,6 @@ #pragma once -#ifndef JSON_H -#define JSON_H +#ifndef CATA_SRC_JSON_H +#define CATA_SRC_JSON_H #include #include @@ -1416,4 +1416,4 @@ void deserialize( cata::optional &obj, JsonIn &jsin ) } } -#endif +#endif // CATA_SRC_JSON_H diff --git a/src/kill_tracker.h b/src/kill_tracker.h index 5bb19af8de160..24ad24f607fdc 100644 --- a/src/kill_tracker.h +++ b/src/kill_tracker.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CATA_KILL_TRACKER_H -#define CATA_KILL_TRACKER_H +#ifndef CATA_SRC_KILL_TRACKER_H +#define CATA_SRC_KILL_TRACKER_H #include #include @@ -44,4 +44,4 @@ class kill_tracker : public event_subscriber std::vector npc_kills; // names of NPCs the player killed }; -#endif // CATA_KILL_TRACKER_H +#endif // CATA_SRC_KILL_TRACKER_H diff --git a/src/lightmap.cpp b/src/lightmap.cpp index 2855345fe0aad..ff0217154601f 100644 --- a/src/lightmap.cpp +++ b/src/lightmap.cpp @@ -1444,8 +1444,8 @@ void map::apply_light_arc( const tripoint &p, int angle, float luminance, int wi void map::apply_light_ray( bool lit[LIGHTMAP_CACHE_X][LIGHTMAP_CACHE_Y], const tripoint &s, const tripoint &e, float luminance ) { - int ax = abs( e.x - s.x ) * 2; - int ay = abs( e.y - s.y ) * 2; + int ax = std::abs( e.x - s.x ) * 2; + int ay = std::abs( e.y - s.y ) * 2; int dx = ( s.x < e.x ) ? 1 : -1; int dy = ( s.y < e.y ) ? 1 : -1; int x = s.x; diff --git a/src/lightmap.h b/src/lightmap.h index 5068d82398ff7..8df48f6273a52 100644 --- a/src/lightmap.h +++ b/src/lightmap.h @@ -1,6 +1,6 @@ #pragma once -#ifndef LIGHTMAP_H -#define LIGHTMAP_H +#ifndef CATA_SRC_LIGHTMAP_H +#define CATA_SRC_LIGHTMAP_H #include @@ -35,4 +35,4 @@ enum lit_level { LL_BLANK // blank space, not an actual light level }; -#endif +#endif // CATA_SRC_LIGHTMAP_H diff --git a/src/line.cpp b/src/line.cpp index f94500b1b05a8..2cf190cd00ae3 100644 --- a/src/line.cpp +++ b/src/line.cpp @@ -74,9 +74,9 @@ void bresenham( const tripoint &loc1, const tripoint &loc2, int t, int t2, const int sy = ( dy == 0 ? 0 : sgn( dy ) ); const int sz = ( dz == 0 ? 0 : sgn( dz ) ); // Absolute values of slope components, x2 to avoid rounding errors. - const int ax = abs( dx ) * 2; - const int ay = abs( dy ) * 2; - const int az = abs( dz ) * 2; + const int ax = std::abs( dx ) * 2; + const int ay = std::abs( dy ) * 2; + const int az = std::abs( dz ) * 2; tripoint cur( loc1 ); @@ -568,12 +568,12 @@ std::vector squares_in_direction( const point &p1, const point &p2 ) float rl_vec2d::magnitude() const { - return sqrt( x * x + y * y ); + return std::sqrt( x * x + y * y ); } float rl_vec3d::magnitude() const { - return sqrt( x * x + y * y + z * z ); + return std::sqrt( x * x + y * y + z * z ); } rl_vec2d rl_vec2d::normalized() const @@ -637,8 +637,8 @@ bool rl_vec2d::is_null() const point rl_vec2d::as_point() const { return point( - round( x ), - round( y ) + std::round( x ), + std::round( y ) ); } @@ -650,9 +650,9 @@ bool rl_vec3d::is_null() const tripoint rl_vec3d::as_point() const { return tripoint( - round( x ), - round( y ), - round( z ) + std::round( x ), + std::round( y ), + std::round( z ) ); } diff --git a/src/line.h b/src/line.h index 86b17872b6ff0..724c0f7ade12e 100644 --- a/src/line.h +++ b/src/line.h @@ -1,6 +1,6 @@ #pragma once -#ifndef LINE_H -#define LINE_H +#ifndef CATA_SRC_LINE_H +#define CATA_SRC_LINE_H #include #include @@ -32,7 +32,7 @@ constexpr double ARCMIN( double v ) inline double iso_tangent( double distance, double vertex ) { // we can use the cosine formula (a² = b² + c² - 2bc⋅cosθ) to calculate the tangent - return sqrt( 2 * pow( distance, 2 ) * ( 1 - cos( ARCMIN( vertex ) ) ) ); + return std::sqrt( 2 * std::pow( distance, 2 ) * ( 1 - cos( ARCMIN( vertex ) ) ) ); } //! This compile-time usable function combines the sign of each (x, y, z) component into a single integer @@ -151,9 +151,9 @@ extern bool trigdist; inline float trig_dist( const tripoint &loc1, const tripoint &loc2 ) { - return sqrt( static_cast( ( loc1.x - loc2.x ) * ( loc1.x - loc2.x ) ) + - ( ( loc1.y - loc2.y ) * ( loc1.y - loc2.y ) ) + - ( ( loc1.z - loc2.z ) * ( loc1.z - loc2.z ) ) ); + return std::sqrt( static_cast( ( loc1.x - loc2.x ) * ( loc1.x - loc2.x ) ) + + ( ( loc1.y - loc2.y ) * ( loc1.y - loc2.y ) ) + + ( ( loc1.z - loc2.z ) * ( loc1.z - loc2.z ) ) ); } inline float trig_dist( const point &loc1, const point &loc2 ) { @@ -211,7 +211,7 @@ struct FastDistanceApproximation { } inline operator int() const { if( trigdist ) { - return sqrt( value ); + return std::sqrt( value ); } return value; } @@ -318,4 +318,4 @@ struct rl_vec3d { rl_vec3d operator+ ( const rl_vec3d &rhs ) const; }; -#endif +#endif // CATA_SRC_LINE_H diff --git a/src/list.h b/src/list.h index 53d2846c81c84..ed9814609c719 100644 --- a/src/list.h +++ b/src/list.h @@ -21,8 +21,8 @@ // 3. This notice may not be removed or altered from any source distribution. #pragma once -#ifndef LIST_H -#define LIST_H +#ifndef CATA_SRC_LIST_H +#define CATA_SRC_LIST_H #define LIST_BLOCK_MIN static_cast((sizeof(node) * 8 > (sizeof(*this) + sizeof(group)) * 2) ? 8 : (((sizeof(*this) + sizeof(group)) * 2) / sizeof(node)) + 1) #define LIST_BLOCK_MAX 2048 @@ -2467,4 +2467,4 @@ inline void swap( list &a, #undef LIST_ALLOCATE_INITIALIZATION #undef LIST_DEALLOCATE -#endif // LIST_H +#endif // CATA_SRC_LIST_H diff --git a/src/live_view.h b/src/live_view.h index 703075eef7382..9d5b42704f4bb 100644 --- a/src/live_view.h +++ b/src/live_view.h @@ -1,6 +1,6 @@ #pragma once -#ifndef LIVE_VIEW_H -#define LIVE_VIEW_H +#ifndef CATA_SRC_LIVE_VIEW_H +#define CATA_SRC_LIVE_VIEW_H #include "point.h" @@ -26,4 +26,4 @@ class live_view bool enabled = false; }; -#endif +#endif // CATA_SRC_LIVE_VIEW_H diff --git a/src/loading_ui.h b/src/loading_ui.h index 56b38a3cecc96..ec69d6a8b3d07 100644 --- a/src/loading_ui.h +++ b/src/loading_ui.h @@ -1,6 +1,6 @@ #pragma once -#ifndef LOADING_UI_H -#define LOADING_UI_H +#ifndef CATA_SRC_LOADING_UI_H +#define CATA_SRC_LOADING_UI_H #include #include @@ -40,4 +40,4 @@ class loading_ui void show(); }; -#endif +#endif // CATA_SRC_LOADING_UI_H diff --git a/src/lru_cache.h b/src/lru_cache.h index ee554e25036ee..0a3d8733b96de 100644 --- a/src/lru_cache.h +++ b/src/lru_cache.h @@ -1,6 +1,6 @@ #pragma once -#ifndef LRU_CACHE_H -#define LRU_CACHE_H +#ifndef CATA_SRC_LRU_CACHE_H +#define CATA_SRC_LRU_CACHE_H #include #include @@ -29,4 +29,4 @@ class lru_cache std::unordered_map::iterator> map; }; -#endif +#endif // CATA_SRC_LRU_CACHE_H diff --git a/src/magic.cpp b/src/magic.cpp index e7d91cd0d9dcf..0ae149c5ec683 100644 --- a/src/magic.cpp +++ b/src/magic.cpp @@ -504,7 +504,7 @@ std::string spell::damage_string() const if( dmg >= 0 ) { return string_format( "%d", dmg ); } else { - return string_format( "+%d", abs( dmg ) ); + return string_format( "+%d", std::abs( dmg ) ); } } } @@ -616,10 +616,10 @@ int spell::energy_cost( const player &p ) const int cost; if( type->base_energy_cost < type->final_energy_cost ) { cost = std::min( type->final_energy_cost, - static_cast( round( type->base_energy_cost + type->energy_increment * get_level() ) ) ); + static_cast( std::round( type->base_energy_cost + type->energy_increment * get_level() ) ) ); } else if( type->base_energy_cost > type->final_energy_cost ) { cost = std::max( type->final_energy_cost, - static_cast( round( type->base_energy_cost + type->energy_increment * get_level() ) ) ); + static_cast( std::round( type->base_energy_cost + type->energy_increment * get_level() ) ) ); } else { cost = type->base_energy_cost; } @@ -687,10 +687,12 @@ int spell::casting_time( const player &p ) const int casting_time = 0; if( type->base_casting_time < type->final_casting_time ) { casting_time = std::min( type->final_casting_time, - static_cast( round( type->base_casting_time + type->casting_time_increment * get_level() ) ) ); + static_cast( std::round( type->base_casting_time + type->casting_time_increment * + get_level() ) ) ); } else if( type->base_casting_time > type->final_casting_time ) { casting_time = std::max( type->final_casting_time, - static_cast( round( type->base_casting_time + type->casting_time_increment * get_level() ) ) ); + static_cast( std::round( type->base_casting_time + type->casting_time_increment * + get_level() ) ) ); } else { casting_time = type->base_casting_time; } @@ -735,7 +737,7 @@ float spell::spell_fail( const player &p ) const } else if( effective_skill < 0.0f ) { return 1.0f; } - float fail_chance = pow( ( effective_skill - 30.0f ) / 30.0f, 2 ); + float fail_chance = std::pow( ( effective_skill - 30.0f ) / 30.0f, 2 ); if( has_flag( spell_flag::SOMATIC ) && !p.has_trait_flag( "SUBTLE_SPELL" ) ) { // the first 20 points of encumbrance combined is ignored const int arms_encumb = std::max( 0, p.encumb( bp_arm_l ) + p.encumb( bp_arm_r ) - 20 ); @@ -895,7 +897,7 @@ void spell::create_field( const tripoint &at ) const void spell::make_sound( const tripoint &target ) const { if( !has_flag( spell_flag::SILENT ) ) { - int loudness = abs( damage() ) / 3; + int loudness = std::abs( damage() ) / 3; if( has_flag( spell_flag::LOUD ) ) { loudness += 1 + damage() / 3; } @@ -1009,7 +1011,7 @@ constexpr float c = -62.5; int spell::get_level() const { // you aren't at the next level unless you have the requisite xp, so floor - return std::max( static_cast( floor( log( experience + a ) / b + c ) ), 0 ); + return std::max( static_cast( std::floor( std::log( experience + a ) / b + c ) ), 0 ); } int spell::get_max_level() const @@ -1026,7 +1028,7 @@ static int exp_for_level( int level ) if( level == 0 ) { return 0; } - return ceil( exp( ( level - c ) * b ) ) - a; + return std::ceil( std::exp( ( level - c ) * b ) ) - a; } int spell::exp_to_next_level() const @@ -1042,7 +1044,7 @@ std::string spell::exp_progress() const const int denominator = next_level_xp - this_level_xp; const float progress = static_cast( xp() - this_level_xp ) / std::max( 1.0f, static_cast( denominator ) ); - return string_format( "%i%%", clamp( static_cast( round( progress * 100 ) ), 0, 99 ) ); + return string_format( "%i%%", clamp( static_cast( std::round( progress * 100 ) ), 0, 99 ) ); } float spell::exp_modifier( const player &p ) const @@ -1059,7 +1061,7 @@ int spell::casting_exp( const player &p ) const // the amount of xp you would get with no modifiers const int base_casting_xp = 75; - return round( p.adjust_for_focus( base_casting_xp * exp_modifier( p ) ) ); + return std::round( p.adjust_for_focus( base_casting_xp * exp_modifier( p ) ) ); } std::string spell::enumerate_targets() const @@ -1157,7 +1159,7 @@ void spell::cast_all_effects( Creature &source, const tripoint &target ) const { if( has_flag( spell_flag::WONDER ) ) { const auto iter = type->additional_spells.begin(); - for( int num_spells = abs( damage() ); num_spells > 0; num_spells-- ) { + for( int num_spells = std::abs( damage() ); num_spells > 0; num_spells-- ) { if( type->additional_spells.empty() ) { debugmsg( "ERROR: %s has WONDER flag but no spells to choose from!", type->id.c_str() ); return; diff --git a/src/magic.h b/src/magic.h index be7816a2fc427..d8894ae769307 100644 --- a/src/magic.h +++ b/src/magic.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MAGIC_H -#define MAGIC_H +#ifndef CATA_SRC_MAGIC_H +#define CATA_SRC_MAGIC_H #include #include @@ -609,4 +609,4 @@ struct area_expander { void sort_descending(); }; -#endif +#endif // CATA_SRC_MAGIC_H diff --git a/src/magic_enchantment.h b/src/magic_enchantment.h index 7d3e1bb3ff372..8ba26adc2b874 100644 --- a/src/magic_enchantment.h +++ b/src/magic_enchantment.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MAGIC_ENCHANTMENT_H -#define MAGIC_ENCHANTMENT_H +#ifndef CATA_SRC_MAGIC_ENCHANTMENT_H +#define CATA_SRC_MAGIC_ENCHANTMENT_H #include #include @@ -171,4 +171,4 @@ class enchantment const fake_spell &sp ) const; }; -#endif +#endif // CATA_SRC_MAGIC_ENCHANTMENT_H diff --git a/src/magic_spell_effect.cpp b/src/magic_spell_effect.cpp index 87988a5aef047..9ece4403a018d 100644 --- a/src/magic_spell_effect.cpp +++ b/src/magic_spell_effect.cpp @@ -191,8 +191,8 @@ std::set spell_effect::spell_effect_cone( const spell &sp, const tripo const int range = sp.range() + 1; const int initial_angle = coord_to_angle( source, target ); std::set end_points; - for( int angle = initial_angle - floor( aoe_radius / 2.0 ); - angle <= initial_angle + ceil( aoe_radius / 2.0 ); angle++ ) { + for( int angle = initial_angle - std::floor( aoe_radius / 2.0 ); + angle <= initial_angle + std::ceil( aoe_radius / 2.0 ); angle++ ) { tripoint potential; calc_ray_end( angle, range, source, potential ); end_points.emplace( potential ); @@ -793,7 +793,7 @@ void spell_effect::spawn_summoned_monster( const spell &sp, Creature &caster, const mtype_id mon_id( sp.effect_data() ); std::set area = spell_effect_area( sp, target, spell_effect_blast, caster ); // this should never be negative, but this'll keep problems from happening - size_t num_mons = abs( sp.damage() ); + size_t num_mons = std::abs( sp.damage() ); const time_duration summon_time = sp.duration_turns(); while( num_mons > 0 && !area.empty() ) { const size_t mon_spot = rng( 0, area.size() - 1 ); diff --git a/src/magic_teleporter_list.h b/src/magic_teleporter_list.h index dfe0944e7b49a..4e925c0d37477 100644 --- a/src/magic_teleporter_list.h +++ b/src/magic_teleporter_list.h @@ -1,6 +1,6 @@ #pragma once -#ifndef TELEPORTER_LIST_H -#define TELEPORTER_LIST_H +#ifndef CATA_SRC_MAGIC_TELEPORTER_LIST_H +#define CATA_SRC_MAGIC_TELEPORTER_LIST_H #include #include @@ -38,4 +38,4 @@ class teleporter_list void deserialize( JsonIn &jsin ); }; -#endif // !TELEPORTER_LIST_H +#endif // CATA_SRC_MAGIC_TELEPORTER_LIST_H diff --git a/src/magic_ter_furn_transform.h b/src/magic_ter_furn_transform.h index c12b3399863cc..3a65ba06780ca 100644 --- a/src/magic_ter_furn_transform.h +++ b/src/magic_ter_furn_transform.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MAGIC_TER_FURN_TRANSFORM_H -#define MAGIC_TER_FURN_TRANSFORM_H +#ifndef CATA_SRC_MAGIC_TER_FURN_TRANSFORM_H +#define CATA_SRC_MAGIC_TER_FURN_TRANSFORM_H #include #include @@ -83,4 +83,4 @@ class ter_furn_transform bool is_valid() const; }; -#endif +#endif // CATA_SRC_MAGIC_TER_FURN_TRANSFORM_H diff --git a/src/main_menu.h b/src/main_menu.h index 5f9e8507c3c4b..188d66ac4fe44 100644 --- a/src/main_menu.h +++ b/src/main_menu.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MAIN_MENU_H -#define MAIN_MENU_H +#ifndef CATA_SRC_MAIN_MENU_H +#define CATA_SRC_MAIN_MENU_H #include #include @@ -108,5 +108,5 @@ class main_menu std::string halloween_graves(); }; -#endif +#endif // CATA_SRC_MAIN_MENU_H diff --git a/src/map.cpp b/src/map.cpp index d324d04397d25..c31b7da76dee2 100755 --- a/src/map.cpp +++ b/src/map.cpp @@ -449,7 +449,7 @@ vehicle *map::move_vehicle( vehicle &veh, const tripoint &dp, const tileray &fac if( dp == tripoint_zero ) { debugmsg( "Empty displacement vector" ); return &veh; - } else if( abs( dp.x ) > 1 || abs( dp.y ) > 1 || abs( dp.z ) > 1 ) { + } else if( std::abs( dp.x ) > 1 || std::abs( dp.y ) > 1 || std::abs( dp.z ) > 1 ) { debugmsg( "Invalid displacement vector: %d, %d, %d", dp.x, dp.y, dp.z ); return &veh; } @@ -777,7 +777,7 @@ float map::vehicle_vehicle_collision( vehicle &veh, vehicle &veh2, const float m1 = to_kilogram( veh.total_mass() ); // Collision is perfectly inelastic for simplicity // Assume veh2 is standing still - dmg = abs( veh.vertical_velocity / 100 ) * m1 / 10; + dmg = std::abs( veh.vertical_velocity / 100 ) * m1 / 10; veh.vertical_velocity = 0; } @@ -1728,7 +1728,8 @@ bool map::valid_move( const tripoint &from, const tripoint &to, assert( to.z > std::numeric_limits::min() ); // Note: no need to check inbounds here, because maptile_at will do that // If oob tile is supplied, the maptile_at will be an unpassable "null" tile - if( abs( from.x - to.x ) > 1 || abs( from.y - to.y ) > 1 || abs( from.z - to.z ) > 1 ) { + if( std::abs( from.x - to.x ) > 1 || std::abs( from.y - to.y ) > 1 || + std::abs( from.z - to.z ) > 1 ) { return false; } @@ -1773,7 +1774,7 @@ bool map::valid_move( const tripoint &from, const tripoint &to, if( !up_ter.has_flag( TFLAG_NO_FLOOR ) && !up_ter.has_flag( TFLAG_GOES_DOWN ) && !up_is_ledge ) { // Can't move from up to down - if( abs( from.x - to.x ) == 1 || abs( from.y - to.y ) == 1 ) { + if( std::abs( from.x - to.x ) == 1 || std::abs( from.y - to.y ) == 1 ) { // Break the move into two - vertical then horizontal tripoint midpoint( down_p.xy(), up_p.z ); return valid_move( down_p, midpoint, bash, flying ) && @@ -4628,9 +4629,9 @@ bool map::could_see_items( const tripoint &p, const tripoint &from ) const if( container ) { // can see inside of containers if adjacent or // on top of the container - return ( abs( p.x - from.x ) <= 1 && - abs( p.y - from.y ) <= 1 && - abs( p.z - from.z ) <= 1 ); + return ( std::abs( p.x - from.x ) <= 1 && + std::abs( p.y - from.y ) <= 1 && + std::abs( p.z - from.z ) <= 1 ); } return true; } @@ -6443,7 +6444,7 @@ void map::shift( const point &sp ) return; // Skip this? } - if( abs( sp.x ) > 1 || abs( sp.y ) > 1 ) { + if( std::abs( sp.x ) > 1 || std::abs( sp.y ) > 1 ) { debugmsg( "map::shift called with a shift of more than one submap" ); } diff --git a/src/map.h b/src/map.h index c94f332693146..31ee3ef049d80 100644 --- a/src/map.h +++ b/src/map.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MAP_H -#define MAP_H +#ifndef CATA_SRC_MAP_H +#define CATA_SRC_MAP_H #include #include @@ -1842,4 +1842,4 @@ class fake_map : public tinymap int fake_map_z ); ~fake_map() override; }; -#endif +#endif // CATA_SRC_MAP_H diff --git a/src/map_extras.cpp b/src/map_extras.cpp index 838f0ad3f12c6..207750f9a3aa5 100644 --- a/src/map_extras.cpp +++ b/src/map_extras.cpp @@ -318,7 +318,7 @@ static bool mx_helicopter( map &m, const tripoint &abs_sub ) } } - } else if( one_in( 4 + ( abs( x - cx ) + ( abs( y - + } else if( one_in( 4 + ( std::abs( x - cx ) + ( std::abs( y - cy ) ) ) ) ) { // 1 in 10 chance of being wreckage anyway m.make_rubble( tripoint( x, y, abs_sub.z ), f_wreckage, true ); if( !one_in( 3 ) ) { @@ -350,8 +350,8 @@ static bool mx_helicopter( map &m, const tripoint &abs_sub ) int x_offset = veh->dir_vec().x * x_length / 2; int y_offset = veh->dir_vec().y * y_length / 2; - int x_min = abs( bbox.p1.x ) + 0; - int y_min = abs( bbox.p1.y ) + 0; + int x_min = std::abs( bbox.p1.x ) + 0; + int y_min = std::abs( bbox.p1.y ) + 0; int x_max = SEEX * 2 - bbox.p2.x - 1; int y_max = SEEY * 2 - bbox.p2.y - 1; @@ -1029,7 +1029,7 @@ static bool mx_minefield( map &m, const tripoint &abs_sub ) bool did_something = false; - if( bridge_at_north && !bridge_at_center && road_at_south ) { + if( bridge_at_north && bridge_at_center && road_at_south ) { //Sandbag block at the left edge line_furn( &m, f_sandbag_half, point( 3, 4 ), point( 3, 7 ) ); line_furn( &m, f_sandbag_half, point( 3, 7 ), point( 9, 7 ) ); @@ -1076,9 +1076,9 @@ static bool mx_minefield( map &m, const tripoint &abs_sub ) } //Horizontal line of barbed wire fence - line( &m, t_fence_barbed, point( 0, 9 ), point( SEEX * 2, 9 ) ); + line( &m, t_fence_barbed, point( 3, 9 ), point( SEEX * 2 - 4, 9 ) ); - std::vector barbed_wire = line_to( point( 0, 9 ), point( SEEX * 2, 9 ) ); + std::vector barbed_wire = line_to( point( 3, 9 ), point( SEEX * 2 - 4, 9 ) ); for( auto &i : barbed_wire ) { //10% chance to spawn corpses of bloody people/zombies on every tile of barbed wire fence if( one_in( 10 ) ) { @@ -1090,7 +1090,7 @@ static bool mx_minefield( map &m, const tripoint &abs_sub ) //Spawn 6-20 mines in the lower submap. //Spawn ordinary mine on asphalt, otherwise spawn buried mine for( int i = 0; i < num_mines; i++ ) { - const int x = rng( 1, SEEX * 2 ), y = rng( SEEY, SEEY * 2 - 2 ); + const int x = rng( 3, SEEX * 2 - 4 ), y = rng( SEEY, SEEY * 2 - 2 ); if( m.has_flag( flag_DIGGABLE, point( x, y ) ) ) { mtrap_set( &m, x, y, tr_landmine_buried ); } else { @@ -1100,7 +1100,7 @@ static bool mx_minefield( map &m, const tripoint &abs_sub ) //Spawn 6-20 puddles of blood on tiles without mines for( int i = 0; i < num_mines; i++ ) { - const int x = rng( 1, SEEX * 2 ), y = rng( SEEY, SEEY * 2 - 2 ); + const int x = rng( 3, SEEX * 2 - 4 ), y = rng( SEEY, SEEY * 2 - 2 ); if( m.tr_at( { x, y, abs_sub.z } ).is_null() ) { m.add_field( { x, y, abs_sub.z }, fd_blood, rng( 1, 3 ) ); //10% chance to spawn a corpse of dead people/zombie on a tile with blood @@ -1117,8 +1117,8 @@ static bool mx_minefield( map &m, const tripoint &abs_sub ) } //Set two warning signs on the last horizontal line of the submap - x = rng( 1, SEEX ); - x1 = rng( SEEX + 1, SEEX * 2 ); + x = rng( 3, SEEX ); + x1 = rng( SEEX + 1, SEEX * 2 - 4 ); m.furn_set( point( x, SEEY * 2 - 1 ), furn_str_id( "f_sign_warning" ) ); m.set_signage( tripoint( x, SEEY * 2 - 1, abs_sub.z ), text ); m.furn_set( point( x1, SEEY * 2 - 1 ), furn_str_id( "f_sign_warning" ) ); @@ -1127,15 +1127,13 @@ static bool mx_minefield( map &m, const tripoint &abs_sub ) did_something = true; } - if( bridge_at_south && !bridge_at_center && road_at_north ) { + if( bridge_at_south && bridge_at_center && road_at_north ) { //Two horizontal lines of sandbags line_furn( &m, f_sandbag_half, point( 5, 15 ), point( 10, 15 ) ); line_furn( &m, f_sandbag_half, point( 13, 15 ), point( 18, 15 ) ); - //|^|-shaped section of barbed wire fence + //Section of barbed wire fence line( &m, t_fence_barbed, point( 3, 13 ), point( SEEX * 2 - 4, 13 ) ); - line( &m, t_fence_barbed, point( 3, 13 ), point( 3, 17 ) ); - line( &m, t_fence_barbed, point( SEEX * 2 - 4, 13 ), point( SEEX * 2 - 4, 17 ) ); std::vector barbed_wire = line_to( point( 3, 13 ), point( SEEX * 2 - 4, 13 ) ); for( auto &i : barbed_wire ) { @@ -1193,7 +1191,7 @@ static bool mx_minefield( map &m, const tripoint &abs_sub ) //Spawn 6-20 mines in the upper submap. //Spawn ordinary mine on asphalt, otherwise spawn buried mine for( int i = 0; i < num_mines; i++ ) { - const int x = rng( 1, SEEX * 2 ), y = rng( 1, SEEY ); + const int x = rng( 3, SEEX * 2 - 4 ), y = rng( 1, SEEY ); if( m.has_flag( flag_DIGGABLE, point( x, y ) ) ) { mtrap_set( &m, x, y, tr_landmine_buried ); } else { @@ -1203,7 +1201,7 @@ static bool mx_minefield( map &m, const tripoint &abs_sub ) //Spawn 6-20 puddles of blood on tiles without mines for( int i = 0; i < num_mines; i++ ) { - const int x = rng( 1, SEEX * 2 ), y = rng( 1, SEEY ); + const int x = rng( 3, SEEX * 2 - 4 ), y = rng( 1, SEEY ); if( m.tr_at( { x, y, abs_sub.z } ).is_null() ) { m.add_field( { x, y, abs_sub.z }, fd_blood, rng( 1, 3 ) ); //10% chance to spawn a corpse of dead people/zombie on a tile with blood @@ -1220,8 +1218,8 @@ static bool mx_minefield( map &m, const tripoint &abs_sub ) } //Set two warning signs on the first horizontal line of the submap - x = rng( 1, SEEX ); - x1 = rng( SEEX + 1, SEEX * 2 ); + x = rng( 3, SEEX ); + x1 = rng( SEEX + 1, SEEX * 2 - 4 ); m.furn_set( point( x, 0 ), furn_str_id( "f_sign_warning" ) ); m.set_signage( tripoint( x, 0, abs_sub.z ), text ); m.furn_set( point( x1, 0 ), furn_str_id( "f_sign_warning" ) ); @@ -1230,7 +1228,7 @@ static bool mx_minefield( map &m, const tripoint &abs_sub ) did_something = true; } - if( bridge_at_west && !bridge_at_center && road_at_east ) { + if( bridge_at_west && bridge_at_center && road_at_east ) { //Draw walls of first tent square_furn( &m, f_canvas_wall, point( 0, 3 ), point( 4, 13 ) ); @@ -1339,7 +1337,7 @@ static bool mx_minefield( map &m, const tripoint &abs_sub ) //Spawn 6-20 mines in the rightmost submap. //Spawn ordinary mine on asphalt, otherwise spawn buried mine for( int i = 0; i < num_mines; i++ ) { - const int x = rng( SEEX + 1, SEEX * 2 - 2 ), y = rng( 1, SEEY * 2 ); + const int x = rng( SEEX + 1, SEEX * 2 - 2 ), y = rng( 3, SEEY * 2 - 4 ); if( m.has_flag( flag_DIGGABLE, point( x, y ) ) ) { mtrap_set( &m, x, y, tr_landmine_buried ); } else { @@ -1349,7 +1347,7 @@ static bool mx_minefield( map &m, const tripoint &abs_sub ) //Spawn 6-20 puddles of blood on tiles without mines for( int i = 0; i < num_mines; i++ ) { - const int x = rng( SEEX + 1, SEEX * 2 - 2 ), y = rng( 1, SEEY * 2 ); + const int x = rng( SEEX + 1, SEEX * 2 - 2 ), y = rng( 3, SEEY * 2 - 4 ); if( m.tr_at( { x, y, abs_sub.z } ).is_null() ) { m.add_field( { x, y, abs_sub.z }, fd_blood, rng( 1, 3 ) ); //10% chance to spawn a corpse of dead people/zombie on a tile with blood @@ -1366,8 +1364,8 @@ static bool mx_minefield( map &m, const tripoint &abs_sub ) } //Set two warning signs on the last vertical line of the submap - y = rng( 1, SEEY ); - y1 = rng( SEEY + 1, SEEY * 2 ); + y = rng( 3, SEEY ); + y1 = rng( SEEY + 1, SEEY * 2 - 4 ); m.furn_set( point( SEEX * 2 - 1, y ), furn_str_id( "f_sign_warning" ) ); m.set_signage( tripoint( SEEX * 2 - 1, y, abs_sub.z ), text ); m.furn_set( point( SEEX * 2 - 1, y1 ), furn_str_id( "f_sign_warning" ) ); @@ -1376,15 +1374,13 @@ static bool mx_minefield( map &m, const tripoint &abs_sub ) did_something = true; } - if( bridge_at_east && !bridge_at_center && road_at_west ) { + if( bridge_at_east && bridge_at_center && road_at_west ) { //Spawn military cargo truck blocking the entry m.add_vehicle( vproto_id( "military_cargo_truck" ), point( 15, 11 ), 270, 70, 1 ); - //Spawn sandbag and barbed wire fence barricades around the truck - line_furn( &m, f_sandbag_half, point( 14, 2 ), point( 14, 8 ) ); - line_furn( &m, f_sandbag_half, point( 14, 17 ), point( 14, 21 ) ); - line( &m, t_fence_barbed, point( 15, 2 ), point( 20, 2 ) ); - line( &m, t_fence_barbed, point( 15, 21 ), point( 20, 21 ) ); + //Spawn sandbag barricades around the truck + line_furn( &m, f_sandbag_half, point( 14, 3 ), point( 14, 8 ) ); + line_furn( &m, f_sandbag_half, point( 14, 17 ), point( 14, 20 ) ); //50% chance to spawn a soldier killed by gunfire, and a trail of blood if( one_in( 2 ) ) { @@ -1475,7 +1471,7 @@ static bool mx_minefield( map &m, const tripoint &abs_sub ) //Spawn 6-20 mines in the leftmost submap. //Spawn ordinary mine on asphalt, otherwise spawn buried mine for( int i = 0; i < num_mines; i++ ) { - const int x = rng( 1, SEEX ), y = rng( 1, SEEY * 2 ); + const int x = rng( 1, SEEX ), y = rng( 3, SEEY * 2 - 4 ); if( m.has_flag( flag_DIGGABLE, point( x, y ) ) ) { mtrap_set( &m, x, y, tr_landmine_buried ); } else { @@ -1485,7 +1481,7 @@ static bool mx_minefield( map &m, const tripoint &abs_sub ) //Spawn 6-20 puddles of blood on tiles without mines for( int i = 0; i < num_mines; i++ ) { - const int x = rng( 1, SEEX ), y = rng( 1, SEEY * 2 ); + const int x = rng( 1, SEEX ), y = rng( 3, SEEY * 2 - 4 ); if( m.tr_at( { x, y, abs_sub.z } ).is_null() ) { m.add_field( { x, y, abs_sub.z }, fd_blood, rng( 1, 3 ) ); //10% chance to spawn a corpse of dead people/zombie on a tile with blood @@ -1502,8 +1498,8 @@ static bool mx_minefield( map &m, const tripoint &abs_sub ) } //Set two warning signs on the first vertical line of the submap - y = rng( 1, SEEY ); - y1 = rng( SEEY + 1, SEEY * 2 ); + y = rng( 3, SEEY ); + y1 = rng( SEEY + 1, SEEY * 2 - 4 ); m.furn_set( point( 0, y ), furn_str_id( "f_sign_warning" ) ); m.set_signage( tripoint( 0, y, abs_sub.z ), text ); m.furn_set( point( 0, y1 ), furn_str_id( "f_sign_warning" ) ); diff --git a/src/map_extras.h b/src/map_extras.h index e28a9204386a3..d625fb63543f5 100644 --- a/src/map_extras.h +++ b/src/map_extras.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MAP_EXTRAS_H -#define MAP_EXTRAS_H +#ifndef CATA_SRC_MAP_EXTRAS_H +#define CATA_SRC_MAP_EXTRAS_H #include #include @@ -81,4 +81,4 @@ const generic_factory &mapExtraFactory(); } // namespace MapExtras -#endif +#endif // CATA_SRC_MAP_EXTRAS_H diff --git a/src/map_item_stack.h b/src/map_item_stack.h index 2e2b2c40627cc..9f27c5ac3cd28 100644 --- a/src/map_item_stack.h +++ b/src/map_item_stack.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MAP_ITEM_STACK_H -#define MAP_ITEM_STACK_H +#ifndef CATA_SRC_MAP_ITEM_STACK_H +#define CATA_SRC_MAP_ITEM_STACK_H #include #include @@ -47,4 +47,4 @@ int list_filter_high_priority( std::vector &stack, const std::st int list_filter_low_priority( std::vector &stack, int start, const std::string &priorities ); -#endif +#endif // CATA_SRC_MAP_ITEM_STACK_H diff --git a/src/map_iterator.h b/src/map_iterator.h index 7e0ec07dc8940..aa3048b9aae7a 100644 --- a/src/map_iterator.h +++ b/src/map_iterator.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MAP_ITERATOR_H -#define MAP_ITERATOR_H +#ifndef CATA_SRC_MAP_ITERATOR_H +#define CATA_SRC_MAP_ITERATOR_H #include @@ -125,4 +125,4 @@ inline tripoint_range points_in_radius( const tripoint ¢er, const int radius return tripoint_range( center - offset, center + offset ); } -#endif +#endif // CATA_SRC_MAP_ITERATOR_H diff --git a/src/map_memory.h b/src/map_memory.h index eac66be84cada..81f80e16b38df 100644 --- a/src/map_memory.h +++ b/src/map_memory.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MAP_MEMORY_H -#define MAP_MEMORY_H +#ifndef CATA_SRC_MAP_MEMORY_H +#define CATA_SRC_MAP_MEMORY_H #include @@ -39,4 +39,4 @@ class map_memory lru_cache symbol_cache; }; -#endif +#endif // CATA_SRC_MAP_MEMORY_H diff --git a/src/map_selector.h b/src/map_selector.h index 9f084295cf75b..a4d6e2b25ee7c 100644 --- a/src/map_selector.h +++ b/src/map_selector.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MAP_SELECTOR_H -#define MAP_SELECTOR_H +#ifndef CATA_SRC_MAP_SELECTOR_H +#define CATA_SRC_MAP_SELECTOR_H #include @@ -70,4 +70,4 @@ class map_selector : public visitable std::vector data; }; -#endif +#endif // CATA_SRC_MAP_SELECTOR_H diff --git a/src/mapbuffer.h b/src/mapbuffer.h index 1517b5e7bcd25..6f681abed8b9b 100644 --- a/src/mapbuffer.h +++ b/src/mapbuffer.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MAPBUFFER_H -#define MAPBUFFER_H +#ifndef CATA_SRC_MAPBUFFER_H +#define CATA_SRC_MAPBUFFER_H #include #include @@ -82,4 +82,4 @@ class mapbuffer extern mapbuffer MAPBUFFER; -#endif +#endif // CATA_SRC_MAPBUFFER_H diff --git a/src/mapdata.h b/src/mapdata.h index 74a75cb7ff618..4b52ca3ee8055 100644 --- a/src/mapdata.h +++ b/src/mapdata.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MAPDATA_H -#define MAPDATA_H +#ifndef CATA_SRC_MAPDATA_H +#define CATA_SRC_MAPDATA_H #include #include @@ -574,4 +574,4 @@ void check_furniture_and_terrain(); void finalize_furniture_and_terrain(); -#endif +#endif // CATA_SRC_MAPDATA_H diff --git a/src/mapgen.cpp b/src/mapgen.cpp index 87f89638fdf06..5cdb8ff32aec8 100644 --- a/src/mapgen.cpp +++ b/src/mapgen.cpp @@ -3872,7 +3872,7 @@ void map::draw_lab( mapgendata &dat ) for( int i = 0; i < SEEX * 2; i++ ) { for( int j = 0; j < SEEY * 2; j++ ) { // Carve out a diamond area that covers 2 spaces on each edge. - if( i + j > 10 && i + j < 36 && abs( i - j ) < 13 ) { + if( i + j > 10 && i + j < 36 && std::abs( i - j ) < 13 ) { // Doors and walls get sometimes destroyed: // 100% at the edge, usually in a central cross, occasionally elsewhere. if( ( has_flag_ter( "DOOR", point( i, j ) ) || has_flag_ter( "WALL", point( i, j ) ) ) ) { @@ -3929,7 +3929,7 @@ void map::draw_lab( mapgendata &dat ) } else if( one_in( 2 ) ) { // Create a spread of densities, from all possible lights on, to 1/3, ... // to ~1 per segment. - light_odds = pow( rng( 1, 12 ), 1.6 ); + light_odds = std::pow( rng( 1, 12 ), 1.6 ); } if( light_odds > 0 ) { for( int i = 0; i < SEEX * 2; i++ ) { @@ -4429,7 +4429,7 @@ void map::draw_lab( mapgendata &dat ) if( central_lab ) { light_odds = 1; } else if( one_in( 2 ) ) { - light_odds = pow( rng( 1, 12 ), 1.6 ); + light_odds = std::pow( rng( 1, 12 ), 1.6 ); } if( light_odds > 0 ) { for( int i = 0; i < SEEX * 2; i++ ) { @@ -4461,7 +4461,7 @@ void map::draw_temple( mapgendata &dat ) square( this, t_rock_floor, point_zero, point( EAST_EDGE, SOUTH_EDGE ) ); // We always start at the south and go north. // We use (y / 2 + z) % 4 to guarantee that rooms don't repeat. - switch( 1 + abs( abs_sub.y / 2 + dat.zlevel() + 4 ) % 4 ) { // TODO: More varieties! + switch( 1 + std::abs( abs_sub.y / 2 + dat.zlevel() + 4 ) % 4 ) { // TODO: More varieties! case 1: // Flame bursts @@ -5484,7 +5484,7 @@ void map::draw_slimepit( mapgendata &dat ) j > SEEY * 2 - dat.s_fac * SEEY || i > SEEX * 2 - dat.e_fac * SEEX ) ) { ter_set( point( i, j ), ( !one_in( 10 ) ? t_slime : t_rock_floor ) ); - } else if( rng( 0, SEEX ) > abs( i - SEEX ) && rng( 0, SEEY ) > abs( j - SEEY ) ) { + } else if( rng( 0, SEEX ) > std::abs( i - SEEX ) && rng( 0, SEEY ) > std::abs( j - SEEY ) ) { ter_set( point( i, j ), t_slime ); } else if( dat.zlevel() == 0 ) { ter_set( point( i, j ), t_dirt ); diff --git a/src/mapgen.h b/src/mapgen.h index 5828e0483e136..6f21a34486f6a 100644 --- a/src/mapgen.h +++ b/src/mapgen.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MAPGEN_H -#define MAPGEN_H +#ifndef CATA_SRC_MAPGEN_H +#define CATA_SRC_MAPGEN_H #include #include @@ -468,4 +468,4 @@ void circle( map *m, const ter_id &type, const point &, int rad ); void circle_furn( map *m, const furn_id &type, const point &, int rad ); void add_corpse( map *m, const point & ); -#endif +#endif // CATA_SRC_MAPGEN_H diff --git a/src/mapgen_functions.cpp b/src/mapgen_functions.cpp index 8ed01b83b6f23..e18ebfd48940d 100644 --- a/src/mapgen_functions.cpp +++ b/src/mapgen_functions.cpp @@ -2434,7 +2434,7 @@ void mapgen_ants_four_way( mapgendata &dat ) } } x += rng( -1, 1 ); - while( abs( SEEX - x ) > SEEY * 2 - j - 1 ) { + while( std::abs( SEEX - x ) > SEEY * 2 - j - 1 ) { if( x < SEEX ) { x++; } @@ -2452,7 +2452,7 @@ void mapgen_ants_four_way( mapgendata &dat ) } } y += rng( -1, 1 ); - while( abs( SEEY - y ) > SEEX * 2 - i - 1 ) { + while( std::abs( SEEY - y ) > SEEX * 2 - i - 1 ) { if( y < SEEY ) { y++; } @@ -2476,7 +2476,7 @@ void mapgen_ants_straight( mapgendata &dat ) } } x += rng( -1, 1 ); - while( abs( SEEX - x ) > SEEX * 2 - j - 1 ) { + while( std::abs( SEEX - x ) > SEEX * 2 - j - 1 ) { if( x < SEEX ) { x++; } @@ -2503,7 +2503,7 @@ void mapgen_ants_tee( mapgendata &dat ) } } x += rng( -1, 1 ); - while( abs( SEEX - x ) > SEEY * 2 - j - 1 ) { + while( std::abs( SEEX - x ) > SEEY * 2 - j - 1 ) { if( x < SEEX ) { x++; } @@ -2520,7 +2520,7 @@ void mapgen_ants_tee( mapgendata &dat ) } } y += rng( -1, 1 ); - while( abs( SEEY - y ) > SEEX * 2 - 1 - i ) { + while( std::abs( SEEY - y ) > SEEX * 2 - 1 - i ) { if( y < SEEY ) { y++; } diff --git a/src/mapgen_functions.h b/src/mapgen_functions.h index 14246d78c5ca6..e83d54bbc067b 100644 --- a/src/mapgen_functions.h +++ b/src/mapgen_functions.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MAPGEN_FUNCTIONS_H -#define MAPGEN_FUNCTIONS_H +#ifndef CATA_SRC_MAPGEN_FUNCTIONS_H +#define CATA_SRC_MAPGEN_FUNCTIONS_H #include #include @@ -90,4 +90,4 @@ std::pair, std::map> get_changed_ids_from_up void resolve_regional_terrain_and_furniture( const mapgendata &dat ); -#endif +#endif // CATA_SRC_MAPGEN_FUNCTIONS_H diff --git a/src/mapgendata.h b/src/mapgendata.h index ab32655471ab9..76bc04a0a288c 100644 --- a/src/mapgendata.h +++ b/src/mapgendata.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MAPGENDATA_H -#define MAPGENDATA_H +#ifndef CATA_SRC_MAPGENDATA_H +#define CATA_SRC_MAPGENDATA_H #include "type_id.h" #include "calendar.h" @@ -138,4 +138,4 @@ class mapgendata bool is_groundcover( const ter_id &iid ) const; }; -#endif +#endif // CATA_SRC_MAPGENDATA_H diff --git a/src/mapgenformat.h b/src/mapgenformat.h index 5953104f5f028..ebdf3cc34e554 100644 --- a/src/mapgenformat.h +++ b/src/mapgenformat.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MAPGENFORMAT_H -#define MAPGENFORMAT_H +#ifndef CATA_SRC_MAPGENFORMAT_H +#define CATA_SRC_MAPGENFORMAT_H #include #include @@ -85,4 +85,4 @@ inline format_effect furn_bind( const char ( &characters )[N], Args... } //END NAMESPACE mapf -#endif +#endif // CATA_SRC_MAPGENFORMAT_H diff --git a/src/mapsharing.h b/src/mapsharing.h index 77488b719fd20..923b2e05a6bed 100644 --- a/src/mapsharing.h +++ b/src/mapsharing.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MAPSHARING_H -#define MAPSHARING_H +#ifndef CATA_SRC_MAPSHARING_H +#define CATA_SRC_MAPSHARING_H #include #include @@ -39,4 +39,4 @@ void addDebugger( const std::string &name ); void setDefaults(); } // namespace MAP_SHARING -#endif +#endif // CATA_SRC_MAPSHARING_H diff --git a/src/martialarts.cpp b/src/martialarts.cpp index 23005b897ffc9..a1bbafe943ab4 100644 --- a/src/martialarts.cpp +++ b/src/martialarts.cpp @@ -1284,7 +1284,7 @@ std::string ma_technique::get_description() const ( 100 * ( weighting - 1 ) ) ) + "\n"; } else if( weighting < -1 ) { dump += string_format( _( "* Lower chance to activate: 1/%s" ), - abs( weighting ) ) + "\n"; + std::abs( weighting ) ) + "\n"; } if( crit_ok ) { diff --git a/src/martialarts.h b/src/martialarts.h index 908bedec9cdf5..f78c91b8cb311 100644 --- a/src/martialarts.h +++ b/src/martialarts.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MARTIALARTS_H -#define MARTIALARTS_H +#ifndef CATA_SRC_MARTIALARTS_H +#define CATA_SRC_MARTIALARTS_H #include #include @@ -297,4 +297,4 @@ std::string martialart_difficulty( const matype_id &mstyle ); std::vector all_martialart_types(); std::vector autolearn_martialart_types(); -#endif +#endif // CATA_SRC_MARTIALARTS_H diff --git a/src/material.h b/src/material.h index 9545fe4f5e682..edf12789efd1a 100644 --- a/src/material.h +++ b/src/material.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MATERIAL_H -#define MATERIAL_H +#ifndef CATA_SRC_MATERIAL_H +#define CATA_SRC_MATERIAL_H #include #include @@ -125,4 +125,4 @@ std::set get_rotting(); } // namespace materials -#endif +#endif // CATA_SRC_MATERIAL_H diff --git a/src/math_defines.h b/src/math_defines.h index d3844756ba353..6419f069b6c90 100644 --- a/src/math_defines.h +++ b/src/math_defines.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CATA_MATH_DEFINES_H -#define CATA_MATH_DEFINES_H +#ifndef CATA_SRC_MATH_DEFINES_H +#define CATA_SRC_MATH_DEFINES_H // On Visual Studio math.h only provides the defines (M_PI, etc.) if // _USE_MATH_DEFINES is defined before including it. @@ -29,4 +29,4 @@ #define M_SQRT2 1.41421356237309504880 #endif -#endif // CATA_MATH_DEFINES_H +#endif // CATA_SRC_MATH_DEFINES_H diff --git a/src/mattack_actors.h b/src/mattack_actors.h index d92b8b9209f3f..cb0e202ca1feb 100644 --- a/src/mattack_actors.h +++ b/src/mattack_actors.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MATTACK_ACTORS_H -#define MATTACK_ACTORS_H +#ifndef CATA_SRC_MATTACK_ACTORS_H +#define CATA_SRC_MATTACK_ACTORS_H #include #include @@ -192,4 +192,4 @@ class gun_actor : public mattack_actor std::unique_ptr clone() const override; }; -#endif +#endif // CATA_SRC_MATTACK_ACTORS_H diff --git a/src/mattack_common.h b/src/mattack_common.h index 0ed7369b8f8d4..6c14ba14d5a46 100644 --- a/src/mattack_common.h +++ b/src/mattack_common.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MATTACK_COMMON_H -#define MATTACK_COMMON_H +#ifndef CATA_SRC_MATTACK_COMMON_H +#define CATA_SRC_MATTACK_COMMON_H #include #include @@ -57,4 +57,4 @@ struct mtype_special_attack { } }; -#endif +#endif // CATA_SRC_MATTACK_COMMON_H diff --git a/src/melee.cpp b/src/melee.cpp index 8f313e9191862..5a293be70f094 100644 --- a/src/melee.cpp +++ b/src/melee.cpp @@ -357,7 +357,7 @@ void player::roll_all_damage( bool crit, damage_instance &di, bool average, cons static void melee_train( player &p, int lo, int hi, const item &weap ) { - p.practice( skill_melee, ceil( rng( lo, hi ) / 2.0 ), hi ); + p.practice( skill_melee, std::ceil( rng( lo, hi ) / 2.0 ), hi ); // allocate XP proportional to damage stats // Pure unarmed needs a special case because it has 0 weapon damage @@ -859,17 +859,17 @@ void player::roll_bash_damage( bool crit, damage_instance &di, bool average, weap.is_null(); if( left_empty || right_empty ) { float per_hand = 0.0f; - for( const std::pair< const trait_id, trait_data > &mut : my_mutations ) { - if( mut.first->flags.count( "NEED_ACTIVE_TO_MELEE" ) > 0 && !has_active_mutation( mut.first ) ) { + for( const trait_id &mut : get_mutations() ) { + if( mut->flags.count( "NEED_ACTIVE_TO_MELEE" ) > 0 && !has_active_mutation( mut ) ) { continue; } float unarmed_bonus = 0.0f; - const int bash_bonus = mut.first->bash_dmg_bonus; - if( mut.first->flags.count( "UNARMED_BONUS" ) > 0 && bash_bonus > 0 ) { + const int bash_bonus = mut->bash_dmg_bonus; + if( mut->flags.count( "UNARMED_BONUS" ) > 0 && bash_bonus > 0 ) { unarmed_bonus += std::min( get_skill_level( skill_unarmed ) / 2, 4 ); } per_hand += bash_bonus + unarmed_bonus; - const std::pair rand_bash = mut.first->rand_bash_bonus; + const std::pair rand_bash = mut->rand_bash_bonus; per_hand += average ? ( rand_bash.first + rand_bash.second ) / 2.0f : rng( rand_bash.first, rand_bash.second ); } @@ -943,17 +943,17 @@ void player::roll_cut_damage( bool crit, damage_instance &di, bool average, cons if( has_bionic( bionic_id( "bio_razors" ) ) ) { per_hand += 2; } - for( const std::pair< const trait_id, trait_data > &mut : my_mutations ) { - if( mut.first->flags.count( "NEED_ACTIVE_TO_MELEE" ) > 0 && !has_active_mutation( mut.first ) ) { + for( const trait_id &mut : get_mutations() ) { + if( mut->flags.count( "NEED_ACTIVE_TO_MELEE" ) > 0 && !has_active_mutation( mut ) ) { continue; } float unarmed_bonus = 0.0f; - const int cut_bonus = mut.first->cut_dmg_bonus; - if( mut.first->flags.count( "UNARMED_BONUS" ) > 0 && cut_bonus > 0 ) { + const int cut_bonus = mut->cut_dmg_bonus; + if( mut->flags.count( "UNARMED_BONUS" ) > 0 && cut_bonus > 0 ) { unarmed_bonus += std::min( get_skill_level( skill_unarmed ) / 2, 4 ); } per_hand += cut_bonus + unarmed_bonus; - const std::pair rand_cut = mut.first->rand_cut_bonus; + const std::pair rand_cut = mut->rand_cut_bonus; per_hand += average ? ( rand_cut.first + rand_cut.second ) / 2.0f : rng( rand_cut.first, rand_cut.second ); } @@ -1149,7 +1149,7 @@ matec_id player::pick_technique( Creature &t, const item &weap, } // If we have negative weighting then roll to see if it's valid this time - if( tec.weighting < 0 && !one_in( abs( tec.weighting ) ) ) { + if( tec.weighting < 0 && !one_in( std::abs( tec.weighting ) ) ) { continue; } @@ -1401,7 +1401,7 @@ void player::perform_technique( const ma_technique &technique, Creature &t, dama g->is_dangerous_tile( prev_pos ) || // Tile contains fire, etc ( to_swimmable && to_deepwater ) || // Dive into deep water is_mounted() || - ( veh0 != nullptr && abs( veh0->velocity ) > 100 ) || // Diving from moving vehicle + ( veh0 != nullptr && std::abs( veh0->velocity ) > 100 ) || // Diving from moving vehicle ( veh0 != nullptr && veh0->player_in_control( g->u ) ) || // Player is driving has_effect( effect_amigara ); @@ -1867,12 +1867,12 @@ std::vector player::mutation_attacks( Creature &t ) const std::string target = t.disp_name(); - const auto usable_body_parts = exclusive_flag_coverage( "ALLOWS_NATURAL_ATTACKS" ); + const body_part_set usable_body_parts = exclusive_flag_coverage( "ALLOWS_NATURAL_ATTACKS" ); const int unarmed = get_skill_level( skill_unarmed ); - for( const auto &pr : my_mutations ) { - const auto &branch = pr.first.obj(); - for( const auto &mut_atk : branch.attacks_granted ) { + for( const trait_id &pr : get_mutations() ) { + const mutation_branch &branch = pr.obj(); + for( const mut_attack &mut_atk : branch.attacks_granted ) { // Covered body part if( mut_atk.bp != num_bp && !usable_body_parts.test( mut_atk.bp ) ) { continue; @@ -1883,7 +1883,7 @@ std::vector player::mutation_attacks( Creature &t ) const // Calculate actor ability value to be compared against mutation attack difficulty and add debug message const int proc_value = get_dex() + unarmed; - add_msg( m_debug, "%s proc chance: %d in %d", pr.first.c_str(), proc_value, mut_atk.chance ); + add_msg( m_debug, "%s proc chance: %d in %d", pr.c_str(), proc_value, mut_atk.chance ); // If the mutation attack fails to proc, bail out if( !x_in_y( proc_value, mut_atk.chance ) ) { continue; @@ -1894,7 +1894,7 @@ std::vector player::mutation_attacks( Creature &t ) const [this]( const trait_id & blocker ) { return has_trait( blocker ); } ) ) { - add_msg( m_debug, "%s not procing: blocked", pr.first.c_str() ); + add_msg( m_debug, "%s not procing: blocked", pr.c_str() ); continue; } @@ -1903,7 +1903,7 @@ std::vector player::mutation_attacks( Creature &t ) const [this]( const trait_id & need ) { return has_trait( need ); } ) ) { - add_msg( m_debug, "%s not procing: unmet req", pr.first.c_str() ); + add_msg( m_debug, "%s not procing: unmet req", pr.c_str() ); continue; } @@ -1919,7 +1919,7 @@ std::vector player::mutation_attacks( Creature &t ) const // Attack starts here if( mut_atk.hardcoded_effect ) { - tmp.damage = hardcoded_mutation_attack( *this, pr.first ); + tmp.damage = hardcoded_mutation_attack( *this, pr ); } else { damage_instance dam = mut_atk.base_damage; damage_instance scaled = mut_atk.strength_damage; @@ -1932,7 +1932,7 @@ std::vector player::mutation_attacks( Creature &t ) const if( tmp.damage.total_damage() > 0.0f ) { ret.emplace_back( tmp ); } else { - add_msg( m_debug, "%s not procing: zero damage", pr.first.c_str() ); + add_msg( m_debug, "%s not procing: zero damage", pr.c_str() ); } } } diff --git a/src/melee.h b/src/melee.h index a2f4eaf5138da..0a600e928919b 100644 --- a/src/melee.h +++ b/src/melee.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MELEE_H -#define MELEE_H +#ifndef CATA_SRC_MELEE_H +#define CATA_SRC_MELEE_H namespace melee { @@ -9,4 +9,4 @@ float melee_hit_range( float accuracy ); } // namespace melee -#endif +#endif // CATA_SRC_MELEE_H diff --git a/src/memorial_logger.h b/src/memorial_logger.h index f9dfa7cb894a8..52fc2ee637114 100644 --- a/src/memorial_logger.h +++ b/src/memorial_logger.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CATA_MEMORIAL_LOGGER_H -#define CATA_MEMORIAL_LOGGER_H +#ifndef CATA_SRC_MEMORIAL_LOGGER_H +#define CATA_SRC_MEMORIAL_LOGGER_H #include #include @@ -48,4 +48,4 @@ class memorial_logger : public event_subscriber std::vector log; }; -#endif // CATA_MEMORIAL_LOGGER_H +#endif // CATA_SRC_MEMORIAL_LOGGER_H diff --git a/src/memory_fast.h b/src/memory_fast.h index f1b2a32022044..93bf49ce2d16a 100644 --- a/src/memory_fast.h +++ b/src/memory_fast.h @@ -1,6 +1,6 @@ #pragma once -#ifndef SINGLETHREADED_PTRS_H -#define SINGLETHREADED_PTRS_H +#ifndef CATA_SRC_MEMORY_FAST_H +#define CATA_SRC_MEMORY_FAST_H #include @@ -22,4 +22,4 @@ template shared_ptr_fast make_shared_fast( } #endif -#endif +#endif // CATA_SRC_MEMORY_FAST_H diff --git a/src/messages.h b/src/messages.h index 3813857cedb5c..65cac42f7c976 100644 --- a/src/messages.h +++ b/src/messages.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MESSAGES_H -#define MESSAGES_H +#ifndef CATA_SRC_MESSAGES_H +#define CATA_SRC_MESSAGES_H #include #include @@ -71,4 +71,4 @@ inline void add_msg( const game_message_params ¶ms, const char *const msg, A return add_msg( params, string_format( msg, std::forward( args )... ) ); } -#endif +#endif // CATA_SRC_MESSAGES_H diff --git a/src/mission.h b/src/mission.h index efa4ca3b46fdb..edc510edcabb6 100644 --- a/src/mission.h +++ b/src/mission.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MISSION_H -#define MISSION_H +#ifndef CATA_SRC_MISSION_H +#define CATA_SRC_MISSION_H #include #include @@ -474,4 +474,4 @@ struct enum_traits { static constexpr mission::mission_status last = mission::mission_status::num_mission_status; }; -#endif +#endif // CATA_SRC_MISSION_H diff --git a/src/mission_companion.cpp b/src/mission_companion.cpp index c3a94dcd6ae92..ebb10982ec883 100644 --- a/src/mission_companion.cpp +++ b/src/mission_companion.cpp @@ -336,7 +336,7 @@ void talk_function::commune_refuge_caravan( mission_data &mission_key, npc &p ) } else if( calendar::turn >= elem->companion_mission_time ) { entry = entry + " " + elem->name + _( " [COMPLETE]\n" ); } else { - entry = entry + " " + elem->name + " [" + to_string( abs( to_hours + entry = entry + " " + elem->name + " [" + to_string( std::abs( to_hours ( calendar::turn - elem->companion_mission_time ) ) ) + _( " Hours]\n" ); } } diff --git a/src/mission_companion.h b/src/mission_companion.h index 9095c338386aa..955743e20d3f6 100644 --- a/src/mission_companion.h +++ b/src/mission_companion.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MISSION_COMPANION_H -#define MISSION_COMPANION_H +#ifndef CATA_SRC_MISSION_COMPANION_H +#define CATA_SRC_MISSION_COMPANION_H #include #include @@ -150,4 +150,4 @@ void companion_return( npc &comp ); void loot_building( const tripoint &site ); } // namespace talk_function -#endif +#endif // CATA_SRC_MISSION_COMPANION_H diff --git a/src/mod_manager.h b/src/mod_manager.h index a9725e26cf9e6..63064ad27d205 100644 --- a/src/mod_manager.h +++ b/src/mod_manager.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MOD_MANAGER_H -#define MOD_MANAGER_H +#ifndef CATA_SRC_MOD_MANAGER_H +#define CATA_SRC_MOD_MANAGER_H #include #include @@ -182,4 +182,4 @@ class mod_ui bool can_shift_down( size_t selection, const std::vector &active_list ); }; -#endif +#endif // CATA_SRC_MOD_MANAGER_H diff --git a/src/mod_tileset.h b/src/mod_tileset.h index 4e41a3f1a9776..03914ce0e71b6 100644 --- a/src/mod_tileset.h +++ b/src/mod_tileset.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MOD_TILESET_H -#define MOD_TILESET_H +#ifndef CATA_SRC_MOD_TILESET_H +#define CATA_SRC_MOD_TILESET_H #include #include @@ -45,4 +45,4 @@ class mod_tileset std::vector compatibility; }; -#endif +#endif // CATA_SRC_MOD_TILESET_H diff --git a/src/monattack.cpp b/src/monattack.cpp index dc9278edd780f..df985685c0447 100644 --- a/src/monattack.cpp +++ b/src/monattack.cpp @@ -475,7 +475,7 @@ bool mattack::shriek_stun( monster *z ) int cone_angle = 20; for( const tripoint &cone : g->m.points_in_radius( z->pos(), 4 ) ) { int tile_angle = coord_to_angle( z->pos(), cone ); - int diff = abs( target_angle - tile_angle ); + int diff = std::abs( target_angle - tile_angle ); // Skip the target, because it's outside cone or it's the source if( diff + cone_angle > 360 || diff > cone_angle || cone == z->pos() ) { continue; @@ -594,7 +594,7 @@ bool mattack::acid( monster *z ) tripoint dest = hitp + tripoint( i, j, 0 ); if( g->m.passable( dest ) && g->m.clear_path( dest, hitp, 6, 1, 100 ) && - ( ( one_in( abs( j ) ) && one_in( abs( i ) ) ) || ( i == 0 && j == 0 ) ) ) { + ( ( one_in( std::abs( j ) ) && one_in( std::abs( i ) ) ) || ( i == 0 && j == 0 ) ) ) { g->m.add_field( dest, fd_acid, 2 ); } } @@ -968,7 +968,7 @@ bool mattack::resurrect( monster *z ) if( corpses.empty() ) { // No nearby corpses if( found_eligible_corpse ) { // There was a corpse, but we haven't charged enough. - if( sees_necromancer && x_in_y( 1, sqrt( lowest_raise_score / 30.0 ) ) ) { + if( sees_necromancer && x_in_y( 1, std::sqrt( lowest_raise_score / 30.0 ) ) ) { add_msg( m_info, _( "The %s gesticulates wildly." ), z->name() ); } while( z->moves >= 0 ) { @@ -5423,14 +5423,14 @@ bool mattack::kamikaze( monster *z ) } // Extra check here to avoid sqrt if not needed if( exp_actor->explosion.power > -1 ) { - int tmp = static_cast( sqrt( static_cast( exp_actor->explosion.power / 4 ) ) ); + int tmp = static_cast( std::sqrt( static_cast( exp_actor->explosion.power / 4 ) ) ); if( tmp > radius ) { radius = tmp; } } if( exp_actor->explosion.shrapnel.casing_mass > 0 ) { // Actual factor is 2 * radius, but figure most pieces of shrapnel will miss - int tmp = static_cast( sqrt( exp_actor->explosion.power ) ); + int tmp = static_cast( std::sqrt( exp_actor->explosion.power ) ); if( tmp > radius ) { radius = tmp; } @@ -5768,5 +5768,5 @@ bool mattack::dodge_check( monster *z, Creature *target ) { ///\EFFECT_DODGE increases chance of dodging, vs their melee skill float dodge = std::max( target->get_dodge() - rng( 0, z->get_hit() ), 0.0f ); - return rng( 0, 10000 ) < 10000 / ( 1 + 99 * exp( -.6 * dodge ) ); + return rng( 0, 10000 ) < 10000 / ( 1 + 99 * std::exp( -.6 * dodge ) ); } diff --git a/src/monattack.h b/src/monattack.h index 3501ea740b63f..44b616213cc36 100644 --- a/src/monattack.h +++ b/src/monattack.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MONATTACK_H -#define MONATTACK_H +#ifndef CATA_SRC_MONATTACK_H +#define CATA_SRC_MONATTACK_H class monster; class Creature; @@ -116,4 +116,4 @@ void flame( monster *z, Creature *target ); bool dodge_check( monster *z, Creature *target ); } //namespace mattack -#endif +#endif // CATA_SRC_MONATTACK_H diff --git a/src/mondeath.cpp b/src/mondeath.cpp index c6de58fbcb453..5eb1568d063ef 100644 --- a/src/mondeath.cpp +++ b/src/mondeath.cpp @@ -126,7 +126,7 @@ static void scatter_chunks( const std::string &chunk_name, int chunk_amt, monste pile_size = std::max( pile_size, 1 ); // can't have more items in a pile than total items pile_size = std::min( chunk_amt, pile_size ); - distance = abs( distance ); + distance = std::abs( distance ); const item chunk( chunk_name, calendar::turn, pile_size ); for( int i = 0; i < chunk_amt; i += pile_size ) { bool drop_chunks = true; @@ -194,15 +194,15 @@ void mdeath::splatter( monster &z ) } } // 1% of the weight of the monster is the base, with overflow damage as a multiplier - int gibbed_weight = rng( 0, round( to_gram( z.get_weight() ) / 100.0 * - ( overflow_damage / max_hp + 1 ) ) ); + int gibbed_weight = rng( 0, std::round( to_gram( z.get_weight() ) / 100.0 * + ( overflow_damage / max_hp + 1 ) ) ); const int z_weight = to_gram( z.get_weight() ); // limit gibbing to 15% gibbed_weight = std::min( gibbed_weight, z_weight * 15 / 100 ); if( pulverized && gibbable ) { float overflow_ratio = overflow_damage / max_hp + 1; - int gib_distance = round( rng( 2, 4 ) ); + int gib_distance = std::round( rng( 2, 4 ) ); for( const auto &entry : *z.type->harvest ) { // only flesh and bones survive. if( entry.type == "flesh" || entry.type == "bone" ) { diff --git a/src/mondeath.h b/src/mondeath.h index ac6c6ada367d5..0e914960654d1 100644 --- a/src/mondeath.h +++ b/src/mondeath.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MONDEATH_H -#define MONDEATH_H +#ifndef CATA_SRC_MONDEATH_H +#define CATA_SRC_MONDEATH_H class monster; @@ -87,4 +87,4 @@ void gameover( monster &z ); void make_mon_corpse( monster &z, int damageLvl ); -#endif +#endif // CATA_SRC_MONDEATH_H diff --git a/src/mondefense.h b/src/mondefense.h index 7e7cc4de4bb79..a0453c43ecccf 100644 --- a/src/mondefense.h +++ b/src/mondefense.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MONDEFENSE_H -#define MONDEFENSE_H +#ifndef CATA_SRC_MONDEFENSE_H +#define CATA_SRC_MONDEFENSE_H class monster; class Creature; @@ -21,4 +21,4 @@ void return_fire( monster &m, Creature *source, const dealt_projectile_attack *p void none( monster &, Creature *, const dealt_projectile_attack * ); } //namespace mdefense -#endif +#endif // CATA_SRC_MONDEFENSE_H diff --git a/src/monexamine.h b/src/monexamine.h index fa869eb2d11c5..9dd9c55ab70f8 100644 --- a/src/monexamine.h +++ b/src/monexamine.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MONEXAMINE_H -#define MONEXAMINE_H +#ifndef CATA_SRC_MONEXAMINE_H +#define CATA_SRC_MONEXAMINE_H class monster; @@ -34,4 +34,4 @@ void attach_or_remove_saddle( monster &z ); */ void milk_source( monster &source_mon ); } // namespace monexamine -#endif +#endif // CATA_SRC_MONEXAMINE_H diff --git a/src/monfaction.h b/src/monfaction.h index 474f367af29ca..d4b3924091d66 100644 --- a/src/monfaction.h +++ b/src/monfaction.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MONFACTION_H -#define MONFACTION_H +#ifndef CATA_SRC_MONFACTION_H +#define CATA_SRC_MONFACTION_H #include @@ -36,4 +36,4 @@ class monfaction mf_attitude attitude( const mfaction_id &other ) const; }; -#endif +#endif // CATA_SRC_MONFACTION_H diff --git a/src/mongroup.h b/src/mongroup.h index f8ea06b076c0b..9b9dc25dd52b3 100644 --- a/src/mongroup.h +++ b/src/mongroup.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MONGROUP_H -#define MONGROUP_H +#ifndef CATA_SRC_MONGROUP_H +#define CATA_SRC_MONGROUP_H #include #include @@ -193,4 +193,4 @@ class MonsterGroupManager static t_string_set monster_categories_whitelist; }; -#endif +#endif // CATA_SRC_MONGROUP_H diff --git a/src/monmove.cpp b/src/monmove.cpp index 687613a98c385..d207326b72a2c 100644 --- a/src/monmove.cpp +++ b/src/monmove.cpp @@ -1098,7 +1098,7 @@ void monster::footsteps( const tripoint &p ) tripoint monster::scent_move() { // TODO: Remove when scentmap is 3D - if( abs( posz() - g->get_levz() ) > SCENT_MAP_Z_REACH ) { + if( std::abs( posz() - g->get_levz() ) > SCENT_MAP_Z_REACH ) { return { -1, -1, INT_MIN }; } @@ -1498,7 +1498,7 @@ bool monster::move_to( const tripoint &p, bool force, bool step_on_critter, g->m.has_flag( TFLAG_NO_FLOOR, p ) ? calc_climb_cost( pos(), destination ) : calc_movecost( pos(), destination ) ); if( cost > 0.0f ) { - moves -= static_cast( ceil( cost ) ); + moves -= static_cast( std::ceil( cost ) ); } else { return false; } @@ -1606,7 +1606,7 @@ bool monster::move_to( const tripoint &p, bool force, bool step_on_critter, if( has_flag( MF_SLUDGETRAIL ) ) { for( const tripoint &sludge_p : g->m.points_in_radius( pos(), 1 ) ) { - const int fstr = 3 - ( abs( sludge_p.x - posx() ) + abs( sludge_p.y - posy() ) ); + const int fstr = 3 - ( std::abs( sludge_p.x - posx() ) + std::abs( sludge_p.y - posy() ) ); if( fstr >= 2 ) { g->m.add_field( sludge_p, fd_sludge, fstr ); } @@ -1685,7 +1685,7 @@ bool monster::push_to( const tripoint &p, const int boost, const size_t depth ) } // Pushing forward is easier than pushing aside - const int direction_penalty = abs( dx - dir.x ) + abs( dy - dir.y ); + const int direction_penalty = std::abs( dx - dir.x ) + std::abs( dy - dir.y ); if( direction_penalty > 2 ) { continue; } diff --git a/src/monster.cpp b/src/monster.cpp index 0a8cadb2a460f..61b869e8adaef 100644 --- a/src/monster.cpp +++ b/src/monster.cpp @@ -2453,7 +2453,7 @@ void monster::process_effects() if( type->regenerates_in_dark ) { const float light = g->m.ambient_light_at( pos() ); // Magic number 10000 was chosen so that a floodlight prevents regeneration in a range of 20 tiles - if( heal( static_cast( 50.0 * exp( - light * light / 10000 ) ) > 0 && one_in( 2 ) && + if( heal( static_cast( 50.0 * std::exp( - light * light / 10000 ) ) > 0 && one_in( 2 ) && g->u.sees( *this ) ) ) { add_msg( m_warning, _( "The %s uses the darkness to regenerate." ), name() ); } diff --git a/src/monster.h b/src/monster.h index 1e6364531373b..ab74660170d68 100644 --- a/src/monster.h +++ b/src/monster.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MONSTER_H -#define MONSTER_H +#ifndef CATA_SRC_MONSTER_H +#define CATA_SRC_MONSTER_H #include #include @@ -568,4 +568,4 @@ class monster : public Creature void process_one_effect( effect &it, bool is_new ) override; }; -#endif +#endif // CATA_SRC_MONSTER_H diff --git a/src/monstergenerator.h b/src/monstergenerator.h index 98558a9d7897d..8810df21cd42c 100644 --- a/src/monstergenerator.h +++ b/src/monstergenerator.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MONSTERGENERATOR_H -#define MONSTERGENERATOR_H +#ifndef CATA_SRC_MONSTERGENERATOR_H +#define CATA_SRC_MONSTERGENERATOR_H #include #include @@ -113,4 +113,4 @@ class MonsterGenerator void load_monster_adjustment( const JsonObject &jsobj ); -#endif +#endif // CATA_SRC_MONSTERGENERATOR_H diff --git a/src/morale.cpp b/src/morale.cpp index 57cefc021b0af..a7ba88cb8c563 100644 --- a/src/morale.cpp +++ b/src/morale.cpp @@ -183,8 +183,8 @@ void player_morale::morale_point::add( const int new_bonus, const int new_max_bo sqrt_of_sum_of_squares = get_net_bonus() + new_bonus; } else { // Otherwise use the sqrt of sum of squares to nerf stacking - sqrt_of_sum_of_squares = pow( get_net_bonus(), 2 ) + pow( new_bonus, 2 ); - sqrt_of_sum_of_squares = sqrt( sqrt_of_sum_of_squares ); + sqrt_of_sum_of_squares = std::pow( get_net_bonus(), 2 ) + std::pow( new_bonus, 2 ); + sqrt_of_sum_of_squares = std::sqrt( sqrt_of_sum_of_squares ); sqrt_of_sum_of_squares *= sgn( bonus ); } @@ -220,7 +220,8 @@ void player_morale::morale_point::decay( const time_duration &ticks ) int player_morale::morale_point::normalize_bonus( int bonus, int max_bonus, bool capped ) const { - return ( ( abs( bonus ) > abs( max_bonus ) && ( max_bonus != 0 || capped ) ) ? max_bonus : bonus ); + return ( ( std::abs( bonus ) > std::abs( max_bonus ) && ( max_bonus != 0 || + capped ) ) ? max_bonus : bonus ); } bool player_morale::mutation_data::get_active() const @@ -381,18 +382,18 @@ void player_morale::calculate_percentage() for( auto &m : points ) { const int bonus = m.get_net_bonus( mult ); if( bonus > 0 ) { - sum_of_positive_squares += pow( bonus, 2 ); + sum_of_positive_squares += std::pow( bonus, 2 ); } else { - sum_of_negative_squares += pow( bonus, 2 ); + sum_of_negative_squares += std::pow( bonus, 2 ); } } for( auto &m : points ) { const int bonus = m.get_net_bonus( mult ); if( bonus > 0 ) { - m.set_percent_contribution( ( pow( bonus, 2 ) / sum_of_positive_squares ) * 100 ); + m.set_percent_contribution( ( std::pow( bonus, 2 ) / sum_of_positive_squares ) * 100 ); } else { - m.set_percent_contribution( ( pow( bonus, 2 ) / sum_of_negative_squares ) * 100 ); + m.set_percent_contribution( ( std::pow( bonus, 2 ) / sum_of_negative_squares ) * 100 ); } } } @@ -404,10 +405,10 @@ int player_morale::get_total_negative_value() const for( auto &m : points ) { const int bonus = m.get_net_bonus( mult ); if( bonus < 0 ) { - sum += pow( bonus, 2 ); + sum += std::pow( bonus, 2 ); } } - return sqrt( sum ); + return std::sqrt( sum ); } int player_morale::get_total_positive_value() const @@ -417,11 +418,11 @@ int player_morale::get_total_positive_value() const for( auto &m : points ) { const int bonus = m.get_net_bonus( mult ); if( bonus > 0 ) { - sum += pow( bonus, 2 ); + sum += std::pow( bonus, 2 ); } } - return sqrt( sum ); + return std::sqrt( sum ); } int player_morale::get_level() const @@ -435,13 +436,13 @@ int player_morale::get_level() const for( auto &m : points ) { const int bonus = m.get_net_bonus( mult ); if( bonus > 0 ) { - sum_of_positive_squares += pow( bonus, 2 ); + sum_of_positive_squares += std::pow( bonus, 2 ); } else { - sum_of_negative_squares += pow( bonus, 2 ); + sum_of_negative_squares += std::pow( bonus, 2 ); } } - level = sqrt( sum_of_positive_squares ) - sqrt( sum_of_negative_squares ); + level = std::sqrt( sum_of_positive_squares ) - std::sqrt( sum_of_negative_squares ); if( took_prozac ) { level *= morale_mults::prozac; diff --git a/src/morale.h b/src/morale.h index 48920e0b38f35..4dcb145d029b8 100644 --- a/src/morale.h +++ b/src/morale.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MORALE_H -#define MORALE_H +#ifndef CATA_SRC_MORALE_H +#define CATA_SRC_MORALE_H #include #include @@ -208,4 +208,4 @@ class player_morale int perceived_pain; }; -#endif +#endif // CATA_SRC_MORALE_H diff --git a/src/morale_types.h b/src/morale_types.h index bcefde2051d78..ba1073a926320 100644 --- a/src/morale_types.h +++ b/src/morale_types.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MORALE_TYPES_H -#define MORALE_TYPES_H +#ifndef CATA_SRC_MORALE_TYPES_H +#define CATA_SRC_MORALE_TYPES_H #include @@ -115,4 +115,4 @@ extern const morale_type MORALE_TREE_COMMUNION; extern const morale_type MORALE_ACCOMPLISHMENT; extern const morale_type MORALE_FAILURE; -#endif +#endif // CATA_SRC_MORALE_TYPES_H diff --git a/src/mtype.h b/src/mtype.h index ed248d9e388ec..3f1fad40b8031 100644 --- a/src/mtype.h +++ b/src/mtype.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MTYPE_H -#define MTYPE_H +#ifndef CATA_SRC_MTYPE_H +#define CATA_SRC_MTYPE_H #include #include @@ -392,4 +392,4 @@ struct mtype { mon_effect_data load_mon_effect_data( const JsonObject &e ); -#endif +#endif // CATA_SRC_MTYPE_H diff --git a/src/mutation.cpp b/src/mutation.cpp index 9102b5bf3fe17..76e5b51860e11 100644 --- a/src/mutation.cpp +++ b/src/mutation.cpp @@ -99,8 +99,8 @@ bool Character::has_trait( const trait_id &b ) const bool Character::has_trait_flag( const std::string &b ) const { // UGLY, SLOW, should be cached as my_mutation_flags or something - for( const auto &mut : my_mutations ) { - auto &mut_data = mut.first.obj(); + for( const trait_id &mut : get_mutations() ) { + const mutation_branch &mut_data = mut.obj(); if( mut_data.flags.count( b ) > 0 ) { return true; } @@ -115,48 +115,58 @@ bool Character::has_base_trait( const trait_id &b ) const return my_traits.find( b ) != my_traits.end(); } -void Character::toggle_trait( const trait_id &flag ) +void Character::toggle_trait( const trait_id &trait_ ) { - const auto titer = my_traits.find( flag ); + // Take copy of argument because it might be a reference into a container + // we're about to erase from. + // NOLINTNEXTLINE(performance-unnecessary-copy-initialization) + const trait_id trait = trait_; + const auto titer = my_traits.find( trait ); + const auto miter = my_mutations.find( trait ); if( titer == my_traits.end() ) { - my_traits.insert( flag ); + my_traits.insert( trait ); } else { my_traits.erase( titer ); } - const auto miter = my_mutations.find( flag ); + if( ( titer == my_traits.end() ) != ( miter == my_mutations.end() ) ) { + debugmsg( "my_traits and my_mutations were out of sync for %s\n", trait.str() ); + return; + } if( miter == my_mutations.end() ) { - set_mutation( flag ); - mutation_effect( flag ); + set_mutation( trait ); } else { - unset_mutation( flag ); - mutation_loss_effect( flag ); + unset_mutation( trait ); } } -void Character::set_mutation( const trait_id &flag ) +void Character::set_mutation( const trait_id &trait ) { - const auto iter = my_mutations.find( flag ); - if( iter == my_mutations.end() ) { - my_mutations[flag]; // Creates a new entry with default values - cached_mutations.push_back( &flag.obj() ); - } else { + const auto iter = my_mutations.find( trait ); + if( iter != my_mutations.end() ) { return; } + my_mutations.emplace( trait, trait_data{} ); + cached_mutations.push_back( &trait.obj() ); + mutation_effect( trait ); recalc_sight_limits(); reset_encumbrance(); } -void Character::unset_mutation( const trait_id &flag ) +void Character::unset_mutation( const trait_id &trait_ ) { - const auto iter = my_mutations.find( flag ); - if( iter != my_mutations.end() ) { - my_mutations.erase( iter ); - const mutation_branch &mut = *flag; - cached_mutations.erase( std::remove( cached_mutations.begin(), cached_mutations.end(), &mut ), - cached_mutations.end() ); - } else { + // Take copy of argument because it might be a reference into a container + // we're about to erase from. + // NOLINTNEXTLINE(performance-unnecessary-copy-initialization) + const trait_id trait = trait_; + const auto iter = my_mutations.find( trait ); + if( iter == my_mutations.end() ) { return; } + const mutation_branch &mut = *trait; + cached_mutations.erase( std::remove( cached_mutations.begin(), cached_mutations.end(), &mut ), + cached_mutations.end() ); + my_mutations.erase( iter ); + mutation_loss_effect( trait ); recalc_sight_limits(); reset_encumbrance(); } @@ -390,8 +400,8 @@ bool Character::is_category_allowed( const std::string &category ) const bool Character::is_weak_to_water() const { - for( const auto &mut : my_mutations ) { - if( mut.first.obj().weakness_to_water > 0 ) { + for( const trait_id &mut : get_mutations() ) { + if( mut.obj().weakness_to_water > 0 ) { return true; } } @@ -613,7 +623,7 @@ void Character::deactivate_mutation( const trait_id &mut ) trait_id Character::trait_by_invlet( const int ch ) const { - for( auto &mut : my_mutations ) { + for( const std::pair &mut : my_mutations ) { if( mut.second.key == ch ) { return mut.first; } @@ -1010,8 +1020,6 @@ bool Character::mutate_towards( const trait_id &mut ) } } - set_mutation( mut ); - bool mutation_replaced = false; game_message_type rating; @@ -1037,8 +1045,6 @@ bool Character::mutate_towards( const trait_id &mut ) g->events().send( getID(), replace_mdata.id, mdata.id ); unset_mutation( replacing ); - mutation_loss_effect( replacing ); - mutation_effect( mut ); mutation_replaced = true; } if( replacing2 ) { @@ -1058,8 +1064,6 @@ bool Character::mutate_towards( const trait_id &mut ) replace_mdata.name(), mdata.name() ); g->events().send( getID(), replace_mdata.id, mdata.id ); unset_mutation( replacing2 ); - mutation_loss_effect( replacing2 ); - mutation_effect( mut ); mutation_replaced = true; } for( const auto &i : canceltrait ) { @@ -1082,8 +1086,6 @@ bool Character::mutate_towards( const trait_id &mut ) cancel_mdata.name(), mdata.name() ); g->events().send( getID(), cancel_mdata.id, mdata.id ); unset_mutation( i ); - mutation_loss_effect( i ); - mutation_effect( mut ); mutation_replaced = true; } if( !mutation_replaced ) { @@ -1102,9 +1104,10 @@ bool Character::mutate_towards( const trait_id &mut ) _( " gains a mutation called %s!" ), mdata.name() ); g->events().send( getID(), mdata.id ); - mutation_effect( mut ); } + set_mutation( mut ); + set_highest_cat_level(); drench_mut_calc(); return true; @@ -1213,8 +1216,6 @@ void Character::remove_mutation( const trait_id &mut, bool silent ) mdata.name(), replace_mdata.name() ); } set_mutation( replacing ); - mutation_loss_effect( mut ); - mutation_effect( replacing ); mutation_replaced = true; } if( replacing2 ) { @@ -1235,8 +1236,6 @@ void Character::remove_mutation( const trait_id &mut, bool silent ) mdata.name(), replace_mdata.name() ); } set_mutation( replacing2 ); - mutation_loss_effect( mut ); - mutation_effect( replacing2 ); mutation_replaced = true; } if( !mutation_replaced ) { @@ -1255,7 +1254,6 @@ void Character::remove_mutation( const trait_id &mut, bool silent ) _( " loses their %s mutation." ), mdata.name() ); } - mutation_loss_effect( mut ); } set_highest_cat_level(); diff --git a/src/mutation.h b/src/mutation.h index 5ce9fde40dee9..0e93f0889f506 100644 --- a/src/mutation.h +++ b/src/mutation.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MUTATION_H -#define MUTATION_H +#ifndef CATA_SRC_MUTATION_H +#define CATA_SRC_MUTATION_H #include #include @@ -507,4 +507,4 @@ mutagen_attempt mutagen_common_checks( player &p, const item &it, bool strong, void test_crossing_threshold( Character &guy, const mutation_category_trait &m_category ); -#endif +#endif // CATA_SRC_MUTATION_H diff --git a/src/mutation_ui.cpp b/src/mutation_ui.cpp index dd8ade146ebd4..0dbbaff0e31b2 100644 --- a/src/mutation_ui.cpp +++ b/src/mutation_ui.cpp @@ -70,7 +70,7 @@ void player::power_mutations() std::vector passive; std::vector active; - for( auto &mut : my_mutations ) { + for( std::pair &mut : my_mutations ) { if( !mut.first->activated ) { passive.push_back( mut.first ); } else { @@ -178,8 +178,8 @@ void player::power_mutations() mvwprintz( wBio, point( 2, list_start_y ), c_light_gray, _( "None" ) ); } else { for( size_t i = scroll_position; i < passive.size(); i++ ) { - const auto &md = passive[i].obj(); - const auto &td = my_mutations[passive[i]]; + const mutation_branch &md = passive[i].obj(); + const trait_data &td = my_mutations[passive[i]]; if( list_start_y + static_cast( i ) == ( menu_mode == "examining" ? DESCRIPTION_LINE_Y : HEIGHT - 1 ) ) { break; @@ -193,8 +193,8 @@ void player::power_mutations() mvwprintz( wBio, point( second_column, list_start_y ), c_light_gray, _( "None" ) ); } else { for( size_t i = scroll_position; i < active.size(); i++ ) { - const auto &md = active[i].obj(); - const auto &td = my_mutations[active[i]]; + const mutation_branch &md = active[i].obj(); + const trait_data &td = my_mutations[active[i]]; if( list_start_y + static_cast( i ) == ( menu_mode == "examining" ? DESCRIPTION_LINE_Y : HEIGHT - 1 ) ) { break; @@ -257,7 +257,7 @@ void player::power_mutations() mutation_chars.get_allowed_chars() ); continue; } - const auto other_mut_id = trait_by_invlet( newch ); + const trait_id other_mut_id = trait_by_invlet( newch ); if( !other_mut_id.is_null() ) { std::swap( my_mutations[mut_id].key, my_mutations[other_mut_id].key ); } else { diff --git a/src/name.h b/src/name.h index 5f5ed19f86ea7..50d0aec28d03a 100644 --- a/src/name.h +++ b/src/name.h @@ -1,6 +1,6 @@ #pragma once -#ifndef NAME_H -#define NAME_H +#ifndef CATA_SRC_NAME_H +#define CATA_SRC_NAME_H #include @@ -41,4 +41,4 @@ inline nameFlags operator&( nameFlags l, nameFlags r ) return static_cast( static_cast( l ) & static_cast( r ) ); } -#endif +#endif // CATA_SRC_NAME_H diff --git a/src/newcharacter.cpp b/src/newcharacter.cpp index a64c383d36bc1..dd4040e83f265 100644 --- a/src/newcharacter.cpp +++ b/src/newcharacter.cpp @@ -218,8 +218,8 @@ void avatar::randomize( const bool random_scenario, points_left &points, bool pl int num_btraits = 0; int tries = 0; add_traits( points ); // adds mandatory profession/scenario traits. - for( const auto &mut : my_mutations ) { - const mutation_branch &mut_info = mut.first.obj(); + for( const trait_id &mut : get_mutations() ) { + const mutation_branch &mut_info = mut.obj(); if( mut_info.profession ) { continue; } @@ -2296,9 +2296,9 @@ tab_direction set_description( avatar &you, const bool allow_reroll, catacurses::window w_age; const auto init_windows = [&]( ui_adaptor & ui ) { w = catacurses::newwin( TERMY, TERMX, point_zero ); - w_name = catacurses::newwin( 2, 42, point( 2, 5 ) ); + w_name = catacurses::newwin( 3, 42, point( 2, 5 ) ); w_gender = catacurses::newwin( 2, 33, point( 46, 5 ) ); - w_location = catacurses::newwin( 1, TERMX - 3, point( 2, 7 ) ); + w_location = catacurses::newwin( 2, 60, point( 100, 5 ) ); w_stats = catacurses::newwin( 6, 20, point( 2, 9 ) ); w_traits = catacurses::newwin( TERMY - 10, 24, point( 22, 9 ) ); w_scenario = catacurses::newwin( 1, TERMX - 47, point( 46, 9 ) ); @@ -2319,7 +2319,7 @@ tab_direction set_description( avatar &you, const bool allow_reroll, input_context ctxt( "NEW_CHAR_DESCRIPTION" ); ctxt.register_cardinal(); ctxt.register_action( "SAVE_TEMPLATE" ); - ctxt.register_action( "PICK_RANDOM_NAME" ); + ctxt.register_action( "RANDOMIZE_CHAR_DESCRIPTION" ); ctxt.register_action( "CHANGE_GENDER" ); ctxt.register_action( "PREV_TAB" ); ctxt.register_action( "NEXT_TAB" ); @@ -2327,7 +2327,7 @@ tab_direction set_description( avatar &you, const bool allow_reroll, ctxt.register_action( "CHOOSE_LOCATION" ); ctxt.register_action( "REROLL_CHARACTER" ); ctxt.register_action( "REROLL_CHARACTER_WITH_SCENARIO" ); - ctxt.register_action( "ANY_INPUT" ); + ctxt.register_action( "CONFIRM" ); ctxt.register_action( "QUIT" ); uilist select_location; @@ -2490,8 +2490,8 @@ tab_direction set_description( avatar &you, const bool allow_reroll, if( !MAP_SHARING::isSharing() ) { // no random names when sharing maps // NOLINTNEXTLINE(cata-use-named-point-constants) fold_and_print( w_name, point( 0, 1 ), ( TERMX / 2 ), c_light_gray, - _( "Press %s to pick a random name." ), - ctxt.get_desc( "PICK_RANDOM_NAME" ) ); + _( "Press %s to edit.\nPress %s to randomize description." ), + ctxt.get_desc( "CONFIRM" ), ctxt.get_desc( "RANDOMIZE_CHAR_DESCRIPTION" ) ); } wrefresh( w_name ); @@ -2511,13 +2511,13 @@ tab_direction set_description( avatar &you, const bool allow_reroll, const std::string location_prompt = string_format( _( "Press %s to select location." ), ctxt.get_desc( "CHOOSE_LOCATION" ) ); - const int prompt_offset = utf8_width( location_prompt ); + werase( w_location ); // NOLINTNEXTLINE(cata-use-named-point-constants) fold_and_print( w_location, point( 0, 1 ), ( TERMX / 2 ), c_light_gray, location_prompt ); - mvwprintz( w_location, point( prompt_offset - 10, 0 ), c_light_gray, _( "Starting location:" ) ); + mvwprintz( w_location, point_zero, c_light_gray, _( "Starting location:" ) ); // ::find will return empty location if id was not found. Debug msg will be printed too. - mvwprintz( w_location, point( prompt_offset + utf8_width( _( "Starting location:" ) ) - 9, 0 ), + mvwprintz( w_location, point( utf8_width( _( "Starting location:" ) ) + 1, 0 ), you.random_start_location ? c_red : c_light_green, you.random_start_location ? remove_color_tags( random_start_location_text ) : string_format( remove_color_tags( START_LOC_TEXT_TEMPLATE ), @@ -2647,10 +2647,14 @@ tab_direction set_description( avatar &you, const bool allow_reroll, if( const auto name = query_for_template_name() ) { you.save_template( *name, points ); } - } else if( action == "PICK_RANDOM_NAME" ) { + } else if( action == "RANDOMIZE_CHAR_DESCRIPTION" ) { if( !MAP_SHARING::isSharing() ) { // Don't allow random names when sharing maps. We don't need to check at the top as you won't be able to edit the name you.pick_name(); + no_name_entered = you.name.empty(); } + you.set_base_age( rng( 16, 55 ) ); + you.set_base_height( rng( 145, 200 ) ); + you.male = one_in( 2 ); } else if( action == "CHANGE_GENDER" ) { you.male = !you.male; } else if( action == "CHOOSE_LOCATION" ) { @@ -2666,28 +2670,42 @@ tab_direction set_description( avatar &you, const bool allow_reroll, } } } - } else if( action == "ANY_INPUT" && + } else if( action == "CONFIRM" && // Don't edit names when sharing maps - !MAP_SHARING::isSharing() && current_selector == char_creation::NAME ) { - const int ch = ctxt.get_raw_input().get_first_input(); - utf8_wrapper wrap( you.name ); - if( ch == KEY_BACKSPACE ) { - if( !wrap.empty() ) { - wrap.erase( wrap.length() - 1, 1 ); - you.name = wrap.str(); + !MAP_SHARING::isSharing() ) { + + string_input_popup popup; + switch( current_selector ) { + case char_creation::NAME: { + popup.title( _( "Enter name. Cancel to delete all." ) ) + .text( you.name ) + .only_digits( false ); + you.name = popup.query_string(); + no_name_entered = you.name.empty(); + break; + } + case char_creation::AGE: { + popup.title( _( "Enter age in years. Minimum 16, maximum 55" ) ) + .text( string_format( "%d", you.base_age() ) ) + .only_digits( true ); + const int result = popup.query_int(); + if( result != 0 ) { + you.set_base_age( clamp( popup.query_int(), 16, 55 ) ); + } + break; } - } else if( ch == KEY_F( 2 ) ) { - utf8_wrapper tmp( get_input_string_from_file() ); - if( !tmp.empty() && tmp.length() + wrap.length() < 30 ) { - you.name.append( tmp.str() ); + case char_creation::HEIGHT: { + popup.title( _( "Enter height in centimeters. Minimum 145, maximum 200" ) ) + .text( string_format( "%d", you.base_height() ) ) + .only_digits( true ); + const int result = popup.query_int(); + if( result != 0 ) { + you.set_base_height( clamp( popup.query_int(), 145, 200 ) ); + } + break; } - } else if( ch == '\n' ) { - // nope, we ignore this newline, don't want it in char names - } else { - wrap.append( ctxt.get_raw_input().text ); - you.name = wrap.str(); } - no_name_entered = false; + } else if( action == "QUIT" && query_yn( _( "Return to main menu?" ) ) ) { return tab_direction::QUIT; } @@ -2702,7 +2720,7 @@ std::vector Character::get_base_traits() const std::vector Character::get_mutations( bool include_hidden ) const { std::vector result; - for( auto &t : my_mutations ) { + for( const std::pair &t : my_mutations ) { if( include_hidden || t.first.obj().player_display ) { result.push_back( t.first ); } @@ -2710,13 +2728,14 @@ std::vector Character::get_mutations( bool include_hidden ) const return result; } -void Character::empty_traits() +void Character::clear_mutations() { - for( auto &mut : my_mutations ) { - on_mutation_loss( mut.first ); + while( !my_traits.empty() ) { + toggle_trait( *my_traits.begin() ); + } + while( !my_mutations.empty() ) { + unset_mutation( my_mutations.begin()->first ); } - my_traits.clear(); - my_mutations.clear(); cached_mutations.clear(); } @@ -2916,7 +2935,7 @@ void reset_scenario( avatar &u, const scenario *scen ) u.toggle_trait( t ); } } - u.empty_traits(); + u.clear_mutations(); u.recalc_hp(); u.empty_skills(); u.add_traits(); diff --git a/src/npc.cpp b/src/npc.cpp index 8eb8935cd5070..1bd1410d4fc20 100644 --- a/src/npc.cpp +++ b/src/npc.cpp @@ -421,7 +421,7 @@ void npc::randomize( const npc_class_id &type ) starting_clothes( *this, myclass, male ); starting_inv( *this, myclass ); has_new_items = true; - empty_traits(); + clear_mutations(); // Add fixed traits for( const auto &tid : trait_group::traits_from( myclass->traits ) ) { @@ -1378,9 +1378,10 @@ float npc::vehicle_danger( int radius ) const vehicle_part last_part = wrapped_veh.v->parts.back(); int size = std::max( last_part.mount.x, last_part.mount.y ); - double normal = sqrt( static_cast( ( bx - ax ) * ( bx - ax ) + ( by - ay ) * ( by - ay ) ) ); - int closest = static_cast( abs( ( posx() - ax ) * ( by - ay ) - ( posy() - ay ) * - ( bx - ax ) ) / normal ); + double normal = std::sqrt( static_cast( ( bx - ax ) * ( bx - ax ) + ( by - ay ) * + ( by - ay ) ) ); + int closest = static_cast( std::abs( ( posx() - ax ) * ( by - ay ) - ( posy() - ay ) * + ( bx - ax ) ) / normal ); if( size > closest ) { danger = i; @@ -2256,7 +2257,7 @@ int npc::print_info( const catacurses::window &w, int line, int vLines, int colu if( per <= 1 ) { visibility_cap = INT_MAX; } else { - visibility_cap = round( dist * dist / 20.0 / ( per - 1 ) ); + visibility_cap = std::round( dist * dist / 20.0 / ( per - 1 ) ); } const auto trait_str = visible_mutations( visibility_cap ); diff --git a/src/npc.h b/src/npc.h index 17be0d73cc621..561e4fafa9dca 100644 --- a/src/npc.h +++ b/src/npc.h @@ -1,6 +1,6 @@ #pragma once -#ifndef NPC_H -#define NPC_H +#ifndef CATA_SRC_NPC_H +#define CATA_SRC_NPC_H #include #include @@ -1429,4 +1429,4 @@ std::ostream &operator<< ( std::ostream &os, const npc_need &need ); /** Opens a menu and allows player to select a friendly NPC. */ npc *pick_follower(); -#endif +#endif // CATA_SRC_NPC_H diff --git a/src/npc_class.h b/src/npc_class.h index f3ce9ad723e48..c2011da2a03c4 100644 --- a/src/npc_class.h +++ b/src/npc_class.h @@ -1,6 +1,6 @@ #pragma once -#ifndef NPC_CLASS_H -#define NPC_CLASS_H +#ifndef CATA_SRC_NPC_CLASS_H +#define CATA_SRC_NPC_CLASS_H #include #include @@ -132,4 +132,4 @@ extern npc_class_id NC_BARTENDER; extern npc_class_id NC_JUNK_SHOPKEEP; extern npc_class_id NC_HALLU; -#endif +#endif // CATA_SRC_NPC_CLASS_H diff --git a/src/npc_favor.h b/src/npc_favor.h index 6b285da89e270..5b953ba6ee3eb 100644 --- a/src/npc_favor.h +++ b/src/npc_favor.h @@ -1,6 +1,6 @@ #pragma once -#ifndef NPC_FAVOR_H -#define NPC_FAVOR_H +#ifndef CATA_SRC_NPC_FAVOR_H +#define CATA_SRC_NPC_FAVOR_H #include @@ -36,4 +36,4 @@ struct npc_favor { void deserialize( JsonIn &jsin ); }; -#endif +#endif // CATA_SRC_NPC_FAVOR_H diff --git a/src/npcmove.cpp b/src/npcmove.cpp index 27ebbc3d8b8aa..fbd30172948b1 100644 --- a/src/npcmove.cpp +++ b/src/npcmove.cpp @@ -1351,7 +1351,7 @@ npc_action npc::method_of_attack() return npc_reach_attack; } } else { - if( reach_range > 1 && reach_range >= round( trig_dist( pos(), tar ) ) && + if( reach_range > 1 && reach_range >= std::round( trig_dist( pos(), tar ) ) && clear_shot_reach( pos(), tar ) ) { add_msg( m_debug, "%s is trying a reach attack", disp_name() ); return npc_reach_attack; @@ -2063,7 +2063,7 @@ bool npc::wont_hit_friend( const tripoint &tar, const item &it, bool throwing ) } int ally_angle = coord_to_angle( pos(), ally.pos() ); - int angle_diff = abs( ally_angle - target_angle ); + int angle_diff = std::abs( ally_angle - target_angle ); angle_diff = std::min( 360 - angle_diff, angle_diff ); if( angle_diff < safe_angle_ally ) { // TODO: Disable NPC whining is it's other NPC who prevents aiming @@ -2308,7 +2308,7 @@ void npc::move_to( const tripoint &pt, bool no_bashing, std::set *nomo const double base_moves = run_cost( g->m.combined_movecost( pos(), p ), diag ) * 100.0 / mounted_creature->get_speed(); const double encumb_moves = get_weight() / 4800.0_gram; - moves -= static_cast( ceil( base_moves + encumb_moves ) ); + moves -= static_cast( std::ceil( base_moves + encumb_moves ) ); if( mounted_creature->has_flag( MF_RIDEABLE_MECH ) ) { mounted_creature->use_mech_power( -1 ); } @@ -2429,9 +2429,9 @@ void npc::avoid_friendly_fire() } float friend_count = ai_cache.friends.size(); - center.x = round( center.x / friend_count ); - center.y = round( center.y / friend_count ); - center.z = round( center.z / friend_count ); + center.x = std::round( center.x / friend_count ); + center.y = std::round( center.y / friend_count ); + center.z = std::round( center.z / friend_count ); std::vector candidates = closest_tripoints_first( pos(), 1 ); candidates.erase( candidates.begin() ); @@ -2494,7 +2494,7 @@ void npc::move_away_from( const tripoint &pt, bool no_bash_atk, std::set best && can_move_to( p, no_bash_atk ) ) { best_pos = p; diff --git a/src/npctalk.cpp b/src/npctalk.cpp index 4563e0fc21d99..b5e95e812c2ea 100644 --- a/src/npctalk.cpp +++ b/src/npctalk.cpp @@ -186,7 +186,7 @@ int npc_trading::cash_to_favor( const npc &, int cash ) // TODO: It should affect different NPCs to a different degree // Square root of mission value in dollars // ~31 for zed mom, 50 for horde master, ~63 for plutonium cells - double scaled_mission_val = sqrt( cash / 100.0 ); + double scaled_mission_val = std::sqrt( cash / 100.0 ); return roll_remainder( scaled_mission_val ); } diff --git a/src/npctalk.h b/src/npctalk.h index 4aa558fc29679..9dd6407392794 100644 --- a/src/npctalk.h +++ b/src/npctalk.h @@ -1,6 +1,6 @@ #pragma once -#ifndef NPCTALK_H -#define NPCTALK_H +#ifndef CATA_SRC_NPCTALK_H +#define CATA_SRC_NPCTALK_H #include "type_id.h" @@ -95,4 +95,4 @@ time_duration calc_skill_training_time( const npc &p, const skill_id &skill ); int calc_skill_training_cost( const npc &p, const skill_id &skill ); time_duration calc_ma_style_training_time( const npc &, const matype_id & /* id */ ); int calc_ma_style_training_cost( const npc &p, const matype_id & /* id */ ); -#endif +#endif // CATA_SRC_NPCTALK_H diff --git a/src/npctrade.h b/src/npctrade.h index 52a8d8a5403bd..27f23428f9186 100644 --- a/src/npctrade.h +++ b/src/npctrade.h @@ -1,6 +1,6 @@ #pragma once -#ifndef NPCTRADE_H -#define NPCTRADE_H +#ifndef CATA_SRC_NPCTRADE_H +#define CATA_SRC_NPCTRADE_H #include #include @@ -102,4 +102,4 @@ std::vector init_selling( npc &p ); std::vector init_buying( player &buyer, player &seller, bool is_npc ); } // namespace npc_trading -#endif +#endif // CATA_SRC_NPCTRADE_H diff --git a/src/omdata.h b/src/omdata.h index 1f3e12cdd683b..c80728c6d24f5 100644 --- a/src/omdata.h +++ b/src/omdata.h @@ -1,6 +1,6 @@ #pragma once -#ifndef OMDATA_H -#define OMDATA_H +#ifndef CATA_SRC_OMDATA_H +#define CATA_SRC_OMDATA_H #include #include @@ -509,4 +509,4 @@ void load( const JsonObject &jo, const std::string &src ); } // namespace city_buildings -#endif +#endif // CATA_SRC_OMDATA_H diff --git a/src/optional.h b/src/optional.h index 618efa148dd30..b944394d17673 100644 --- a/src/optional.h +++ b/src/optional.h @@ -1,6 +1,6 @@ #pragma once -#ifndef OPTIONAL_H -#define OPTIONAL_H +#ifndef CATA_SRC_OPTIONAL_H +#define CATA_SRC_OPTIONAL_H #include #include @@ -254,4 +254,4 @@ constexpr bool operator!=( const optional &lhs, const optional &rhs ) } // namespace cata -#endif +#endif // CATA_SRC_OPTIONAL_H diff --git a/src/options.h b/src/options.h index 72f9b6c4d50e4..e7c4c822fc28c 100644 --- a/src/options.h +++ b/src/options.h @@ -1,6 +1,6 @@ #pragma once -#ifndef OPTIONS_H -#define OPTIONS_H +#ifndef CATA_SRC_OPTIONS_H +#define CATA_SRC_OPTIONS_H #include #include @@ -323,4 +323,4 @@ inline T get_option( const std::string &name ) return get_options().get_option( name ).value_as(); } -#endif +#endif // CATA_SRC_OPTIONS_H diff --git a/src/output.cpp b/src/output.cpp index 59fdc0e6f2eef..6c1e3c595f343 100644 --- a/src/output.cpp +++ b/src/output.cpp @@ -1807,7 +1807,7 @@ std::pair get_light_level( const float light ) }; // Avoid magic number static const int maximum_light_level = static_cast< int >( strings.size() ) - 1; - const int light_level = clamp( static_cast< int >( ceil( light ) ), 0, maximum_light_level ); + const int light_level = clamp( static_cast< int >( std::ceil( light ) ), 0, maximum_light_level ); const size_t array_index = static_cast< size_t >( light_level ); return pair_t{ _( strings[array_index].first ), strings[array_index].second }; } diff --git a/src/output.h b/src/output.h index 71aa229a4a832..bb1448d1c105e 100644 --- a/src/output.h +++ b/src/output.h @@ -1,6 +1,6 @@ #pragma once -#ifndef OUTPUT_H -#define OUTPUT_H +#ifndef CATA_SRC_OUTPUT_H +#define CATA_SRC_OUTPUT_H #include #include @@ -990,4 +990,4 @@ std::string colorize_symbols( const std::string &str, F color_of ) return res; } -#endif +#endif // CATA_SRC_OUTPUT_H diff --git a/src/overlay_ordering.h b/src/overlay_ordering.h index f463c8cac9489..534053aa90fb4 100644 --- a/src/overlay_ordering.h +++ b/src/overlay_ordering.h @@ -1,6 +1,6 @@ #pragma once -#ifndef OVERLAY_ORDERING_H -#define OVERLAY_ORDERING_H +#ifndef CATA_SRC_OVERLAY_ORDERING_H +#define CATA_SRC_OVERLAY_ORDERING_H #include #include @@ -16,4 +16,4 @@ void load_overlay_ordering_into_array( const JsonObject &jsobj, int get_overlay_order_of_mutation( const std::string &mutation_id_string ); void reset_overlay_ordering(); -#endif +#endif // CATA_SRC_OVERLAY_ORDERING_H diff --git a/src/overmap.cpp b/src/overmap.cpp index 5f06e894f6d76..6454fd9e8a00a 100644 --- a/src/overmap.cpp +++ b/src/overmap.cpp @@ -2252,24 +2252,11 @@ void overmap::place_forest_trailheads() return; } - // Add the roads out of the overmap and cities to our collection, which - // we'll then use to connect our trailheads to the rest of the road network. - std::vector &roads_out = connections_out[string_id( "local_road" )]; - std::vector road_points; - road_points.reserve( roads_out.size() + cities.size() ); - for( const auto &elem : roads_out ) { - road_points.emplace_back( elem.xy() ); - } - for( const auto &elem : cities ) { - road_points.emplace_back( elem.pos.x, elem.pos.y ); - } - // Trailheads may be placed if all of the following are true: // 1. we're at a forest_trail_end_north/south/west/east, - // 2. the next two overmap terrains continuing in the direction - // of the trail are fields - // 3. we're within trailhead_road_distance from an existing road - // 4. rng rolls a success for our trailhead_chance from the configuration + // 2. we're within trailhead_road_distance from an existing road + // 3. rng rolls a success for our trailhead_chance from the configuration + // 4. the trailhead special we've picked can be placed in the selected location const auto trailhead_close_to_road = [&]( const tripoint & trailhead ) { bool close = false; @@ -2284,16 +2271,15 @@ void overmap::place_forest_trailheads() return close; }; - const auto try_place_trailhead = [&]( const tripoint & trail_end, const point & offset, - const std::string & suffix ) { - const tripoint trailhead = trail_end + offset; - const tripoint road = trailhead + offset; - const oter_id &oter_potential_trailhead = ter( trailhead ); - const oter_id &oter_potential_road = ter( road ); - if( oter_potential_trailhead == "field" && oter_potential_road == "field" && - one_in( settings.forest_trail.trailhead_chance ) && trailhead_close_to_road( trailhead ) ) { - ter_set( trailhead, oter_id( "trailhead" + suffix ) ); - road_points.emplace_back( road.x, road.y ); + const auto try_place_trailhead_special = [&]( const tripoint & trail_end, + const om_direction::type & dir ) { + const tripoint potential_trailhead = trail_end + om_direction::displace( dir, 1 ); + overmap_special_id trailhead = settings.forest_trail.trailheads.pick(); + if( one_in( settings.forest_trail.trailhead_chance ) && + trailhead_close_to_road( potential_trailhead ) && + can_place_special( *trailhead, potential_trailhead, dir, false ) ) { + const city &nearest_city = get_nearest_city( potential_trailhead ); + place_special( *trailhead, potential_trailhead, dir, nearest_city, false, false ); } }; @@ -2301,26 +2287,11 @@ void overmap::place_forest_trailheads() for( int j = 2; j < OMAPY - 2; j++ ) { const tripoint p( i, j, 0 ); oter_id oter = ter( p ); - if( oter == "forest_trail_end_north" ) { - try_place_trailhead( p, point_north, "_north" ); - } else if( oter == "forest_trail_end_south" ) { - try_place_trailhead( p, point_south, "_south" ); - } else if( oter == "forest_trail_end_west" ) { - try_place_trailhead( p, point_west, "_west" ); - } else if( oter == "forest_trail_end_east" ) { - try_place_trailhead( p, point_east, "_east" ); - } else { - continue; + if( is_ot_match( "forest_trail_end", oter, ot_match_type::prefix ) ) { + try_place_trailhead_special( p, oter->get_dir() ); } } } - - // If we actually added some trailheads... - if( road_points.size() > roads_out.size() ) { - // ...then connect our road points with local_road connections. - const string_id local_road( "local_road" ); - connect_closest_points( road_points, 0, *local_road ); - } } void overmap::place_forests() @@ -2792,22 +2763,22 @@ void overmap::place_river( point pa, point pb ) } if( pb.x > x && ( rng( 0, int( OMAPX * 1.2 ) - 1 ) < pb.x - x || ( rng( 0, int( OMAPX * .2 ) - 1 ) > pb.x - x && - rng( 0, int( OMAPY * .2 ) - 1 ) > abs( pb.y - y ) ) ) ) { + rng( 0, int( OMAPY * .2 ) - 1 ) > std::abs( pb.y - y ) ) ) ) { x++; } if( pb.x < x && ( rng( 0, int( OMAPX * 1.2 ) - 1 ) < x - pb.x || ( rng( 0, int( OMAPX * .2 ) - 1 ) > x - pb.x && - rng( 0, int( OMAPY * .2 ) - 1 ) > abs( pb.y - y ) ) ) ) { + rng( 0, int( OMAPY * .2 ) - 1 ) > std::abs( pb.y - y ) ) ) ) { x--; } if( pb.y > y && ( rng( 0, int( OMAPY * 1.2 ) - 1 ) < pb.y - y || ( rng( 0, int( OMAPY * .2 ) - 1 ) > pb.y - y && - rng( 0, int( OMAPX * .2 ) - 1 ) > abs( x - pb.x ) ) ) ) { + rng( 0, int( OMAPX * .2 ) - 1 ) > std::abs( x - pb.x ) ) ) ) { y++; } if( pb.y < y && ( rng( 0, int( OMAPY * 1.2 ) - 1 ) < y - pb.y || ( rng( 0, int( OMAPY * .2 ) - 1 ) > y - pb.y && - rng( 0, int( OMAPX * .2 ) - 1 ) > abs( x - pb.x ) ) ) ) { + rng( 0, int( OMAPX * .2 ) - 1 ) > std::abs( x - pb.x ) ) ) ) { y--; } x += rng( -1, 1 ); @@ -2829,7 +2800,7 @@ void overmap::place_river( point pa, point pb ) // We don't want our riverbanks touching the edge of the map for many reasons if( inbounds( tripoint( x + j, y + i, 0 ), 1 ) || // UNLESS, of course, that's where the river is headed! - ( abs( pb.y - ( y + i ) ) < 4 && abs( pb.x - ( x + j ) ) < 4 ) ) { + ( std::abs( pb.y - ( y + i ) ) < 4 && std::abs( pb.x - ( x + j ) ) < 4 ) ) { tripoint p( x + j, y + i, 0 ); if( !inbounds( p ) ) { continue; @@ -3968,7 +3939,7 @@ void overmap::place_special( const overmap_special &special, const tripoint &p, if( !inbounds( nearby_pos ) ) { continue; } - if( one_in( 1 + abs( x ) + abs( y ) ) && elem.can_be_placed_on( ter( nearby_pos ) ) ) { + if( one_in( 1 + std::abs( x ) + std::abs( y ) ) && elem.can_be_placed_on( ter( nearby_pos ) ) ) { ter_set( nearby_pos, tid ); } } diff --git a/src/overmap.h b/src/overmap.h index c5f8d24597378..164a66dd5583c 100644 --- a/src/overmap.h +++ b/src/overmap.h @@ -1,6 +1,6 @@ #pragma once -#ifndef OVERMAP_H -#define OVERMAP_H +#ifndef CATA_SRC_OVERMAP_H +#define CATA_SRC_OVERMAP_H #include #include @@ -528,4 +528,4 @@ int oter_get_rotation( const oter_id &oter ); * Return the directional suffix or "" if there isn't one. */ std::string oter_get_rotation_string( const oter_id &oter ); -#endif +#endif // CATA_SRC_OVERMAP_H diff --git a/src/overmap_connection.h b/src/overmap_connection.h index 4256a822acb99..03cf98a09ea9b 100644 --- a/src/overmap_connection.h +++ b/src/overmap_connection.h @@ -1,6 +1,6 @@ #pragma once -#ifndef OVERMAP_CONNECTION_H -#define OVERMAP_CONNECTION_H +#ifndef CATA_SRC_OVERMAP_CONNECTION_H +#define CATA_SRC_OVERMAP_CONNECTION_H #include #include @@ -85,4 +85,4 @@ string_id guess_for( const int_id &oter_id ); } // namespace overmap_connections -#endif // OVERMAP_CONNECTION_H +#endif // CATA_SRC_OVERMAP_CONNECTION_H diff --git a/src/overmap_location.h b/src/overmap_location.h index 701af8f2e9143..415945fbc5faa 100644 --- a/src/overmap_location.h +++ b/src/overmap_location.h @@ -1,6 +1,6 @@ #pragma once -#ifndef OVERMAP_LOCATION_H -#define OVERMAP_LOCATION_H +#ifndef CATA_SRC_OVERMAP_LOCATION_H +#define CATA_SRC_OVERMAP_LOCATION_H #include #include @@ -47,4 +47,4 @@ void finalize(); } // namespace overmap_locations -#endif // OVERMAP_LOCATION_H +#endif // CATA_SRC_OVERMAP_LOCATION_H diff --git a/src/overmap_noise.h b/src/overmap_noise.h index 8215e4ae99b40..efbb18fe812b0 100644 --- a/src/overmap_noise.h +++ b/src/overmap_noise.h @@ -1,6 +1,6 @@ #pragma once -#ifndef OVERMAP_NOISE_H -#define OVERMAP_NOISE_H +#ifndef CATA_SRC_OVERMAP_NOISE_H +#define CATA_SRC_OVERMAP_NOISE_H #include "game_constants.h" #include "point.h" @@ -79,4 +79,4 @@ class om_noise_layer_lake : public om_noise_layer } // namespace om_noise -#endif +#endif // CATA_SRC_OVERMAP_NOISE_H diff --git a/src/overmap_types.h b/src/overmap_types.h index f5ad07cf7dc6d..d4daa6f20e178 100644 --- a/src/overmap_types.h +++ b/src/overmap_types.h @@ -1,6 +1,6 @@ #pragma once -#ifndef OVERMAP_TYPES_H -#define OVERMAP_TYPES_H +#ifndef CATA_SRC_OVERMAP_TYPES_H +#define CATA_SRC_OVERMAP_TYPES_H #include "calendar.h" @@ -16,4 +16,4 @@ class scent_trace int initial_strength; // Original strength, doesn't weaken, it's just adjusted by age. }; -#endif +#endif // CATA_SRC_OVERMAP_TYPES_H diff --git a/src/overmap_ui.h b/src/overmap_ui.h index da2a9d4042a83..19388a6ab2b52 100644 --- a/src/overmap_ui.h +++ b/src/overmap_ui.h @@ -1,6 +1,6 @@ #pragma once -#ifndef OVERMAP_UI_H -#define OVERMAP_UI_H +#ifndef CATA_SRC_OVERMAP_UI_H +#define CATA_SRC_OVERMAP_UI_H #include "point.h" @@ -95,4 +95,4 @@ void draw( const catacurses::window &w, const catacurses::window &wbar, const tr const draw_data_t &data ); void create_note( const tripoint &curs ); } // namespace overmap_ui -#endif /* OVERMAP_UI_H */ +#endif // CATA_SRC_OVERMAP_UI_H diff --git a/src/overmapbuffer.h b/src/overmapbuffer.h index a6a587bf7d9c4..f716106ff8130 100644 --- a/src/overmapbuffer.h +++ b/src/overmapbuffer.h @@ -1,6 +1,6 @@ #pragma once -#ifndef OVERMAPBUFFER_H -#define OVERMAPBUFFER_H +#ifndef CATA_SRC_OVERMAPBUFFER_H +#define CATA_SRC_OVERMAPBUFFER_H #include #include @@ -530,4 +530,4 @@ class overmapbuffer extern overmapbuffer overmap_buffer; -#endif +#endif // CATA_SRC_OVERMAPBUFFER_H diff --git a/src/panels.cpp b/src/panels.cpp index 9f0c29b8b8ba2..ec5af2894d0a4 100644 --- a/src/panels.cpp +++ b/src/panels.cpp @@ -543,10 +543,12 @@ static std::pair temp_delta( const avatar &u ) int current_bp_extreme = 0; int conv_bp_extreme = 0; for( int i = 0; i < num_bp; i++ ) { - if( abs( u.temp_cur[i] - BODYTEMP_NORM ) > abs( u.temp_cur[current_bp_extreme] - BODYTEMP_NORM ) ) { + if( std::abs( u.temp_cur[i] - BODYTEMP_NORM ) > + std::abs( u.temp_cur[current_bp_extreme] - BODYTEMP_NORM ) ) { current_bp_extreme = i; } - if( abs( u.temp_conv[i] - BODYTEMP_NORM ) > abs( u.temp_conv[conv_bp_extreme] - BODYTEMP_NORM ) ) { + if( std::abs( u.temp_conv[i] - BODYTEMP_NORM ) > + std::abs( u.temp_conv[conv_bp_extreme] - BODYTEMP_NORM ) ) { conv_bp_extreme = i; } } @@ -846,7 +848,7 @@ static nc_color safe_color() static int get_int_digits( const int &digits ) { - int temp = abs( digits ); + int temp = std::abs( digits ); if( digits > 0 ) { return static_cast( log10( static_cast( temp ) ) ) + 1; } else if( digits < 0 ) { diff --git a/src/panels.h b/src/panels.h index 63554ad27bc3f..c9e0e21360feb 100644 --- a/src/panels.h +++ b/src/panels.h @@ -1,6 +1,6 @@ #pragma once -#ifndef PANELS_H -#define PANELS_H +#ifndef CATA_SRC_PANELS_H +#define CATA_SRC_PANELS_H #include #include @@ -98,4 +98,4 @@ class panel_manager }; -#endif //PANELS_H +#endif // CATA_SRC_PANELS_H diff --git a/src/path_info.h b/src/path_info.h index c5766f9af8b34..50dee5ee4c8c2 100644 --- a/src/path_info.h +++ b/src/path_info.h @@ -1,6 +1,6 @@ #pragma once -#ifndef PATH_INFO_H -#define PATH_INFO_H +#ifndef CATA_SRC_PATH_INFO_H +#define CATA_SRC_PATH_INFO_H #include @@ -81,4 +81,4 @@ void set_motd( const std::string &motd ); } // namespace PATH_INFO -#endif +#endif // CATA_SRC_PATH_INFO_H diff --git a/src/pathfinding.cpp b/src/pathfinding.cpp index 2857b3f6efff8..b43a763d07ef2 100644 --- a/src/pathfinding.cpp +++ b/src/pathfinding.cpp @@ -483,7 +483,7 @@ std::vector map::route( const tripoint &f, const tripoint &t, ret.push_back( cur ); // Jumps are acceptable on 1 z-level changes // This is because stairs teleport the player too - if( rl_dist( cur, par ) > 1 && abs( cur.z - par.z ) != 1 ) { + if( rl_dist( cur, par ) > 1 && std::abs( cur.z - par.z ) != 1 ) { debugmsg( "Jump in our route! %d:%d:%d->%d:%d:%d", cur.x, cur.y, cur.z, par.x, par.y, par.z ); return ret; diff --git a/src/pathfinding.h b/src/pathfinding.h old mode 100755 new mode 100644 index a54b56cbd0b00..0d1726bd4b1fc --- a/src/pathfinding.h +++ b/src/pathfinding.h @@ -1,6 +1,6 @@ #pragma once -#ifndef PATHFINDING_H -#define PATHFINDING_H +#ifndef CATA_SRC_PATHFINDING_H +#define CATA_SRC_PATHFINDING_H #include "game_constants.h" @@ -72,4 +72,4 @@ struct pathfinding_settings { avoid_sharp( as ) {} }; -#endif +#endif // CATA_SRC_PATHFINDING_H diff --git a/src/pickup.h b/src/pickup.h index 387efeda01423..18601d9f20749 100644 --- a/src/pickup.h +++ b/src/pickup.h @@ -1,6 +1,6 @@ #pragma once -#ifndef PICKUP_H -#define PICKUP_H +#ifndef CATA_SRC_PICKUP_H +#define CATA_SRC_PICKUP_H #include @@ -44,4 +44,4 @@ int cost_to_move_item( const Character &who, const item &it ); bool handle_spillable_contents( Character &c, item &it, map &m ); } // namespace Pickup -#endif +#endif // CATA_SRC_PICKUP_H diff --git a/src/pimpl.h b/src/pimpl.h index 18e73d91cd536..f09d39eb03763 100644 --- a/src/pimpl.h +++ b/src/pimpl.h @@ -1,6 +1,6 @@ #pragma once -#ifndef PIMPL_H -#define PIMPL_H +#ifndef CATA_SRC_PIMPL_H +#define CATA_SRC_PIMPL_H #include #include @@ -75,4 +75,4 @@ class pimpl : private std::unique_ptr } }; -#endif +#endif // CATA_SRC_PIMPL_H diff --git a/src/pixel_minimap.h b/src/pixel_minimap.h index f616026db7397..a3505ca3b6ec3 100644 --- a/src/pixel_minimap.h +++ b/src/pixel_minimap.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MINIMAP_H -#define MINIMAP_H +#ifndef CATA_SRC_PIXEL_MINIMAP_H +#define CATA_SRC_PIXEL_MINIMAP_H #include #include @@ -90,4 +90,4 @@ class pixel_minimap std::map cache; }; -#endif // MINIMAP_H +#endif // CATA_SRC_PIXEL_MINIMAP_H diff --git a/src/pixel_minimap_projectors.h b/src/pixel_minimap_projectors.h index 25180cc090416..187abec7d147a 100644 --- a/src/pixel_minimap_projectors.h +++ b/src/pixel_minimap_projectors.h @@ -1,6 +1,6 @@ #pragma once -#ifndef PIXEL_MINIMAP_PROJECTORS_H -#define PIXEL_MINIMAP_PROJECTORS_H +#ifndef CATA_SRC_PIXEL_MINIMAP_PROJECTORS_H +#define CATA_SRC_PIXEL_MINIMAP_PROJECTORS_H #include "point.h" #include "sdl_wrappers.h" @@ -53,4 +53,4 @@ class pixel_minimap_iso_projector : public pixel_minimap_projector point tile_size; }; -#endif // PIXEL_MINIMAP_PROJECTORS_H +#endif // CATA_SRC_PIXEL_MINIMAP_PROJECTORS_H diff --git a/src/player.cpp b/src/player.cpp index a03c953da25f0..fa2491e380a82 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -290,8 +290,6 @@ player::player() next_expected_position = cata::nullopt; death_drops = true; - empty_traits(); - nv_cached = false; volume = 0; @@ -484,7 +482,7 @@ int player::kcal_speed_penalty() // TODO: get speed penalties for being too fat, too return 0; } else { - return round( multi_lerp( starv_thresholds, get_bmi() ) ); + return std::round( multi_lerp( starv_thresholds, get_bmi() ) ); } } @@ -695,7 +693,7 @@ double player::recoil_vehicle() const if( in_vehicle ) { if( const optional_vpart_position vp = g->m.veh_at( pos() ) ) { - return static_cast( abs( vp->vehicle().velocity ) ) * 3 / 100; + return static_cast( std::abs( vp->vehicle().velocity ) ) * 3 / 100; } } return 0; @@ -792,8 +790,8 @@ bool player::has_opposite_trait( const trait_id &flag ) const return true; } } - for( const std::pair &mut : my_mutations ) { - for( const trait_id &canceled_trait : mut.first->cancels ) { + for( const trait_id &mut : get_mutations() ) { + for( const trait_id &canceled_trait : mut->cancels ) { if( canceled_trait == flag ) { return true; } @@ -4075,9 +4073,9 @@ int player::book_fun_for( const item &book, const player &p ) const if( ( p.has_trait( trait_CANNIBAL ) || p.has_trait( trait_PSYCHOPATH ) || p.has_trait( trait_SAPIOVORE ) ) && book.typeId() == "cookbook_human" ) { - fun_bonus = abs( fun_bonus ); + fun_bonus = std::abs( fun_bonus ); } else if( p.has_trait( trait_SPIRITUAL ) && book.has_flag( "INSPIRATIONAL" ) ) { - fun_bonus = abs( fun_bonus * 3 ); + fun_bonus = std::abs( fun_bonus * 3 ); } if( has_trait( trait_LOVES_BOOKS ) ) { @@ -4899,8 +4897,8 @@ action_id player::get_next_auto_move_direction() // Make sure the direction is just one step and that // all diagonal moves have 0 z component - if( abs( dp.x ) > 1 || abs( dp.y ) > 1 || abs( dp.z ) > 1 || - ( abs( dp.z ) != 0 && ( abs( dp.x ) != 0 || abs( dp.y ) != 0 ) ) ) { + if( std::abs( dp.x ) > 1 || std::abs( dp.y ) > 1 || std::abs( dp.z ) > 1 || + ( std::abs( dp.z ) != 0 && ( std::abs( dp.x ) != 0 || std::abs( dp.y ) != 0 ) ) ) { // Should never happen, but check just in case return ACTION_NULL; } @@ -5173,9 +5171,10 @@ float player::hearing_ability() const std::string player::visible_mutations( const int visibility_cap ) const { - const std::string trait_str = enumerate_as_string( my_mutations.begin(), my_mutations.end(), - [visibility_cap ]( const std::pair &pr ) -> std::string { - const auto &mut_branch = pr.first.obj(); + const std::vector &my_muts = get_mutations(); + const std::string trait_str = enumerate_as_string( my_muts.begin(), my_muts.end(), + [visibility_cap ]( const trait_id & pr ) -> std::string { + const auto &mut_branch = pr.obj(); // Finally some use for visibility trait of mutations if( mut_branch.visibility > 0 && mut_branch.visibility >= visibility_cap ) { @@ -5247,7 +5246,7 @@ std::vector player::get_targetable_creatures( const int range ) cons } } } - bool in_range = round( rl_dist_exact( pos(), critter.pos() ) ) <= range; + bool in_range = std::round( rl_dist_exact( pos(), critter.pos() ) ) <= range; // TODO: get rid of fake npcs (pos() check) bool valid_target = this != &critter && pos() != critter.pos() && attitude_to( critter ) != Creature::Attitude::A_FRIENDLY; return valid_target && in_range && can_see; @@ -5258,7 +5257,7 @@ std::vector player::get_hostile_creatures( int range ) const { return g->get_creatures_if( [this, range]( const Creature & critter ) -> bool { // Fixes circular distance range for ranged attacks - float dist_to_creature = round( rl_dist_exact( pos(), critter.pos() ) ); + float dist_to_creature = std::round( rl_dist_exact( pos(), critter.pos() ) ); return this != &critter && pos() != critter.pos() && // TODO: get rid of fake npcs (pos() check) dist_to_creature <= range && critter.attitude_to( *this ) == A_HOSTILE && sees( critter ); diff --git a/src/player.h b/src/player.h index 7ce68784965c5..88c8ddbc3426a 100644 --- a/src/player.h +++ b/src/player.h @@ -1,6 +1,6 @@ #pragma once -#ifndef PLAYER_H -#define PLAYER_H +#ifndef CATA_SRC_PLAYER_H +#define CATA_SRC_PLAYER_H #include #include @@ -1050,4 +1050,4 @@ class player : public Character mutable decltype( _skills ) valid_autolearn_skills; }; -#endif +#endif // CATA_SRC_PLAYER_H diff --git a/src/player_activity.h b/src/player_activity.h index 8a89400f72e94..04162d98de5df 100644 --- a/src/player_activity.h +++ b/src/player_activity.h @@ -1,6 +1,6 @@ #pragma once -#ifndef PLAYER_ACTIVITY_H -#define PLAYER_ACTIVITY_H +#ifndef CATA_SRC_PLAYER_ACTIVITY_H +#define CATA_SRC_PLAYER_ACTIVITY_H #include #include @@ -141,4 +141,4 @@ class player_activity void inherit_distractions( const player_activity & ); }; -#endif +#endif // CATA_SRC_PLAYER_ACTIVITY_H diff --git a/src/player_display.cpp b/src/player_display.cpp index 08e98767c2d1f..9e74633767a3e 100644 --- a/src/player_display.cpp +++ b/src/player_display.cpp @@ -1053,13 +1053,13 @@ static void draw_initial_windows( const catacurses::window &w_stats, line++; } if( you.get_thirst() > 40 ) { - pen = abs( player::thirst_speed_penalty( you.get_thirst() ) ); + pen = std::abs( player::thirst_speed_penalty( you.get_thirst() ) ); mvwprintz( w_speed, point( 1, line ), c_red, pgettext( "speed penalty", "Thirst -%2d%%" ), pen ); line++; } if( you.kcal_speed_penalty() < 0 ) { - pen = abs( you.kcal_speed_penalty() ); + pen = std::abs( you.kcal_speed_penalty() ); const std::string inanition = you.get_bmi() < character_weight_category::underweight ? _( "Starving" ) : _( "Underfed" ); //~ %s: Starving/Underfed (already left-justified), %2d: speed penalty @@ -1317,8 +1317,8 @@ void player::disp_info() // Post-humanity trumps your pre-Cataclysm life. if( crossed_threshold() ) { std::string race; - for( auto &mut : my_mutations ) { - const auto &mdata = mut.first.obj(); + for( const trait_id &mut : get_mutations() ) { + const mutation_branch &mdata = mut.obj(); if( mdata.threshold ) { race = mdata.name(); break; @@ -1372,8 +1372,8 @@ void player::disp_info() nc_color col = ( speed_effect.second > 0 ? c_green : c_red ); mvwprintz( w_speed, point( 1, line ), col, "%s", speed_effect.first ); mvwprintz( w_speed, point( 21, line ), col, ( speed_effect.second > 0 ? "+" : "-" ) ); - mvwprintz( w_speed, point( abs( speed_effect.second ) >= 10 ? 22 : 23, line ), col, "%d%%", - abs( speed_effect.second ) ); + mvwprintz( w_speed, point( std::abs( speed_effect.second ) >= 10 ? 22 : 23, line ), col, "%d%%", + std::abs( speed_effect.second ) ); line++; } diff --git a/src/player_hardcoded_effects.cpp b/src/player_hardcoded_effects.cpp index 18ffabfade79e..8104d255e7310 100644 --- a/src/player_hardcoded_effects.cpp +++ b/src/player_hardcoded_effects.cpp @@ -1137,7 +1137,7 @@ void player::hardcoded_effects( effect &it ) } bool woke_up = false; - int tirednessVal = rng( 5, 200 ) + rng( 0, abs( get_fatigue() * 2 * 5 ) ); + int tirednessVal = rng( 5, 200 ) + rng( 0, std::abs( get_fatigue() * 2 * 5 ) ); if( !is_blind() && !has_effect( effect_narcosis ) ) { if( !has_trait( trait_SEESLEEP ) ) { // People who can see while sleeping are acclimated to the light. diff --git a/src/pldata.h b/src/pldata.h index b864c03f2399e..47c07a0a61184 100644 --- a/src/pldata.h +++ b/src/pldata.h @@ -1,6 +1,6 @@ #pragma once -#ifndef PLDATA_H -#define PLDATA_H +#ifndef CATA_SRC_PLDATA_H +#define CATA_SRC_PLDATA_H #include @@ -60,4 +60,4 @@ class addiction void deserialize( JsonIn &jsin ); }; -#endif +#endif // CATA_SRC_PLDATA_H diff --git a/src/point.h b/src/point.h index f3de6f5a59c6a..a724265687fc3 100644 --- a/src/point.h +++ b/src/point.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CATA_POINT_H -#define CATA_POINT_H +#ifndef CATA_SRC_POINT_H +#define CATA_SRC_POINT_H // The CATA_NO_STL macro is used by the cata clang-tidy plugin tests so they // can include this header when compiling with -nostdinc++ @@ -313,12 +313,12 @@ std::vector closest_points_first( const point ¢er, int min_dist, int inline point abs( const point &p ) { - return point( abs( p.x ), abs( p.y ) ); + return point( std::abs( p.x ), std::abs( p.y ) ); } inline tripoint abs( const tripoint &p ) { - return tripoint( abs( p.x ), abs( p.y ), abs( p.z ) ); + return tripoint( std::abs( p.x ), std::abs( p.y ), std::abs( p.z ) ); } static constexpr tripoint tripoint_min { INT_MIN, INT_MIN, INT_MIN }; @@ -396,4 +396,4 @@ static const std::array eight_horizontal_neighbors = { { #endif // CATA_NO_STL -#endif // CATA_POINT_H +#endif // CATA_SRC_POINT_H diff --git a/src/popup.h b/src/popup.h index 188e0919eaff9..6a28cba765f60 100644 --- a/src/popup.h +++ b/src/popup.h @@ -1,6 +1,6 @@ #pragma once -#ifndef POPUP_H -#define POPUP_H +#ifndef CATA_SRC_POPUP_H +#define CATA_SRC_POPUP_H #include #include @@ -280,4 +280,4 @@ class static_popup : public query_popup std::shared_ptr ui; }; -#endif +#endif // CATA_SRC_POPUP_H diff --git a/src/posix_time.h b/src/posix_time.h index 6e4a2ee808bf3..e38d1426554cf 100644 --- a/src/posix_time.h +++ b/src/posix_time.h @@ -1,6 +1,6 @@ #pragma once -#ifndef TIME_SPEC_H -#define TIME_SPEC_H +#ifndef CATA_SRC_POSIX_TIME_H +#define CATA_SRC_POSIX_TIME_H // Compatibility header. On POSIX, just include . On Windows, provide // our own nanosleep implementation. @@ -48,4 +48,4 @@ nanosleep( const struct timespec *requested_delay, struct timespec *remaining_delay ); #endif -#endif +#endif // CATA_SRC_POSIX_TIME_H diff --git a/src/profession.h b/src/profession.h index d7dd772dfb393..f3f7ccc812242 100644 --- a/src/profession.h +++ b/src/profession.h @@ -1,6 +1,6 @@ #pragma once -#ifndef PROFESSION_H -#define PROFESSION_H +#ifndef CATA_SRC_PROFESSION_H +#define CATA_SRC_PROFESSION_H #include #include @@ -132,4 +132,4 @@ class profession std::set get_forbidden_traits() const; }; -#endif +#endif // CATA_SRC_PROFESSION_H diff --git a/src/projectile.h b/src/projectile.h index f1dfd894606b1..008e4030c1fc0 100644 --- a/src/projectile.h +++ b/src/projectile.h @@ -1,6 +1,6 @@ #pragma once -#ifndef PROJECTILE_H -#define PROJECTILE_H +#ifndef CATA_SRC_PROJECTILE_H +#define CATA_SRC_PROJECTILE_H #include #include @@ -61,4 +61,4 @@ struct dealt_projectile_attack { void apply_ammo_effects( const tripoint &p, const std::set &effects ); int max_aoe_size( const std::set &tags ); -#endif +#endif // CATA_SRC_PROJECTILE_H diff --git a/src/ranged.cpp b/src/ranged.cpp index 21f2379280fe8..a3ca204437490 100644 --- a/src/ranged.cpp +++ b/src/ranged.cpp @@ -781,7 +781,7 @@ dealt_projectile_attack player::throw_item( const tripoint &target, const item & // Avoid awarding tons of xp for lucky throws against hard to hit targets const float range_factor = std::min( range, skill_lvl + 3 ); // We're aiming to get a damaging hit, not just an accurate one - reward proper weapons - const float damage_factor = 5.0f * sqrt( proj.impact.total_damage() / 5.0f ); + const float damage_factor = 5.0f * std::sqrt( proj.impact.total_damage() / 5.0f ); // This should generally have values below ~20*sqrt(skill_lvl) const float final_xp_mult = range_factor * damage_factor; @@ -1487,11 +1487,11 @@ std::vector target_handler::target_ui( player &pc, target_mode mode, // This chunk of code handles shifting the aim point around // at maximum range when using circular distance. // The range > 1 check ensures that you can always at least hit adjacent squares. - if( trigdist && range > 1 && round( trig_dist( src, dst ) ) > range ) { + if( trigdist && range > 1 && std::round( trig_dist( src, dst ) ) > range ) { bool cont = true; tripoint cp = dst; for( size_t i = 0; i < ret.size() && cont; i++ ) { - if( round( trig_dist( src, ret[i] ) ) > range ) { + if( std::round( trig_dist( src, ret[i] ) ) > range ) { ret.resize( i ); cont = false; } else { @@ -2039,11 +2039,11 @@ std::vector target_handler::target_ui( spell &casting, const bool no_f // This chunk of code handles shifting the aim point around // at maximum range when using circular distance. // The range > 1 check ensures that you can always at least hit adjacent squares. - if( trigdist && range > 1 && round( trig_dist( src, dst ) ) > range ) { + if( trigdist && range > 1 && std::round( trig_dist( src, dst ) ) > range ) { bool cont = true; tripoint cp = dst; for( size_t i = 0; i < ret.size() && cont; i++ ) { - if( round( trig_dist( src, ret[i] ) ) > range ) { + if( std::round( trig_dist( src, ret[i] ) ) > range ) { ret.resize( i ); cont = false; } else { diff --git a/src/ranged.h b/src/ranged.h index 18d3c64ae1219..ceef5552ca208 100644 --- a/src/ranged.h +++ b/src/ranged.h @@ -1,5 +1,5 @@ -#ifndef RANGED_H -#define RANGED_H +#ifndef CATA_SRC_RANGED_H +#define CATA_SRC_RANGED_H #include @@ -111,4 +111,4 @@ class target_handler int range_with_even_chance_of_good_hit( int dispersion ); -#endif // RANGED_H +#endif // CATA_SRC_RANGED_H diff --git a/src/recipe.cpp b/src/recipe.cpp index 4a7019c452a8f..c84896e8eb3e9 100644 --- a/src/recipe.cpp +++ b/src/recipe.cpp @@ -64,7 +64,7 @@ int recipe::batch_time( int batch, float multiplier, size_t assistants ) const const double scale = batch_rsize / 6.0; for( int x = 0; x < batch; x++ ) { // scaled logistic function output - const double logf = ( 2.0 / ( 1.0 + exp( -( x / scale ) ) ) ) - 1.0; + const double logf = ( 2.0 / ( 1.0 + std::exp( -( x / scale ) ) ) ) - 1.0; total_time += local_time * ( 1.0 - ( batch_rscale * logf ) ); } } diff --git a/src/recipe.h b/src/recipe.h index f27a52a0256e0..cf7fdac5ade91 100644 --- a/src/recipe.h +++ b/src/recipe.h @@ -1,6 +1,6 @@ #pragma once -#ifndef RECIPE_H -#define RECIPE_H +#ifndef CATA_SRC_RECIPE_H +#define CATA_SRC_RECIPE_H #include #include @@ -226,4 +226,4 @@ class recipe std::vector> reqs_blueprint; }; -#endif // RECIPE_H +#endif // CATA_SRC_RECIPE_H diff --git a/src/recipe_dictionary.h b/src/recipe_dictionary.h index 9e9ab4ee6d8f6..a9667404e0c61 100644 --- a/src/recipe_dictionary.h +++ b/src/recipe_dictionary.h @@ -1,6 +1,6 @@ #pragma once -#ifndef RECIPE_DICTIONARY_H -#define RECIPE_DICTIONARY_H +#ifndef CATA_SRC_RECIPE_DICTIONARY_H +#define CATA_SRC_RECIPE_DICTIONARY_H #include #include @@ -186,4 +186,4 @@ class recipe_subset void serialize( const recipe_subset &value, JsonOut &jsout ); void deserialize( recipe_subset &value, JsonIn &jsin ); -#endif +#endif // CATA_SRC_RECIPE_DICTIONARY_H diff --git a/src/recipe_groups.h b/src/recipe_groups.h index 34ed49d565646..32d442212a2c7 100644 --- a/src/recipe_groups.h +++ b/src/recipe_groups.h @@ -1,6 +1,6 @@ #pragma once -#ifndef RECIPE_GROUPS_H -#define RECIPE_GROUPS_H +#ifndef CATA_SRC_RECIPE_GROUPS_H +#define CATA_SRC_RECIPE_GROUPS_H #include #include @@ -22,4 +22,4 @@ std::map get_recipes_by_id( const std::string &id, const std::string &om_terrain_id = "ANY" ); } // namespace recipe_group -#endif +#endif // CATA_SRC_RECIPE_GROUPS_H diff --git a/src/rect_range.h b/src/rect_range.h index 451e23c242536..bb93a38f598e0 100644 --- a/src/rect_range.h +++ b/src/rect_range.h @@ -1,6 +1,6 @@ #pragma once -#ifndef RECT_RANGE_H -#define RECT_RANGE_H +#ifndef CATA_SRC_RECT_RANGE_H +#define CATA_SRC_RECT_RANGE_H // This is a template parameter, it's usually SDL_Rect, but that way the class // can be used without include any SDL header. @@ -59,4 +59,4 @@ class rect_range } }; -#endif +#endif // CATA_SRC_RECT_RANGE_H diff --git a/src/regional_settings.cpp b/src/regional_settings.cpp index 1b336bf0d7584..b54417322bdf5 100644 --- a/src/regional_settings.cpp +++ b/src/regional_settings.cpp @@ -222,6 +222,19 @@ static void load_forest_trail_settings( const JsonObject &jo, forest_trail_settings.unfinalized_trail_terrain[member.name()] = member.get_int(); } } + + if( !forest_trail_settings_jo.has_object( "trailheads" ) ) { + if( !overlay ) { + forest_trail_settings_jo.throw_error( "trailheads required" ); + } + } else { + for( const JsonMember member : forest_trail_settings_jo.get_object( "trailheads" ) ) { + if( member.is_comment() ) { + continue; + } + forest_trail_settings.trailheads.add( overmap_special_id( member.name() ), member.get_int() ); + } + } } } @@ -893,6 +906,8 @@ void forest_trail_settings::finalize() } trail_terrain.add( tid.id(), pr.second ); } + + trailheads.finalize(); } void overmap_lake_settings::finalize() @@ -1039,7 +1054,7 @@ void building_bin::finalize() return; } if( unfinalized_buildings.empty() ) { - debugmsg( "There must be at least one house, shop, and park for each regional map setting used." ); + debugmsg( "There must be at least one entry in this building bin." ); return; } diff --git a/src/regional_settings.h b/src/regional_settings.h index 2930fd17f44d4..d55867bc15c2b 100644 --- a/src/regional_settings.h +++ b/src/regional_settings.h @@ -1,6 +1,6 @@ #pragma once -#ifndef REGIONAL_SETTINGS_H -#define REGIONAL_SETTINGS_H +#ifndef CATA_SRC_REGIONAL_SETTINGS_H +#define CATA_SRC_REGIONAL_SETTINGS_H #include #include @@ -157,6 +157,7 @@ struct forest_trail_settings { bool clear_trail_terrain = false; std::map unfinalized_trail_terrain; weighted_int_list trail_terrain; + building_bin trailheads; void finalize(); forest_trail_settings() = default; @@ -258,4 +259,4 @@ void reset_region_settings(); void load_region_overlay( const JsonObject &jo ); void apply_region_overlay( const JsonObject &jo, regional_settings ®ion ); -#endif +#endif // CATA_SRC_REGIONAL_SETTINGS_H diff --git a/src/relic.cpp b/src/relic.cpp index 8e18883034b2d..3d9758e0a026f 100644 --- a/src/relic.cpp +++ b/src/relic.cpp @@ -105,9 +105,9 @@ int relic::modify_value( const enchantment::mod value_type, const int value ) co multiply_modifier = std::max( multiply_modifier + 1.0, 0.0 ); int modified_value; if( multiply_modifier < 1.0 ) { - modified_value = floor( multiply_modifier * value ); + modified_value = std::floor( multiply_modifier * value ); } else { - modified_value = ceil( multiply_modifier * value ); + modified_value = std::ceil( multiply_modifier * value ); } return modified_value + add_modifier; } diff --git a/src/relic.h b/src/relic.h index 6a89295c807ab..fda75a1c19f3e 100644 --- a/src/relic.h +++ b/src/relic.h @@ -1,6 +1,6 @@ #pragma once -#ifndef RELIC_H -#define RELIC_H +#ifndef CATA_SRC_RELIC_H +#define CATA_SRC_RELIC_H #include #include @@ -45,4 +45,4 @@ class relic int modify_value( enchantment::mod value_type, int value ) const; }; -#endif // !RELIC_H +#endif // CATA_SRC_RELIC_H diff --git a/src/requirements.cpp b/src/requirements.cpp index 12fc0dd668bbb..7949f26cdbf4e 100644 --- a/src/requirements.cpp +++ b/src/requirements.cpp @@ -117,7 +117,7 @@ std::string tool_comp::to_string( const int batch, const int ) const count * batch ), item::nname( type ), count * batch ); } else { - return item::nname( type, abs( count ) ); + return item::nname( type, std::abs( count ) ); } } @@ -828,7 +828,7 @@ bool requirement_data::check_enough_materials( const item_comp &comp, const inve } // This item can be used for the quality requirement, same as above for specific // tools applies. - if( !crafting_inv.has_quality( qr->type, qr->level, qr->count + abs( comp.count ) ) ) { + if( !crafting_inv.has_quality( qr->type, qr->level, qr->count + std::abs( comp.count ) ) ) { comp.available = available_status::a_insufficent; } } diff --git a/src/requirements.h b/src/requirements.h index 81311bf526d2f..4b9dc34d57be8 100644 --- a/src/requirements.h +++ b/src/requirements.h @@ -1,6 +1,6 @@ #pragma once -#ifndef REQUIREMENTS_H -#define REQUIREMENTS_H +#ifndef CATA_SRC_REQUIREMENTS_H +#define CATA_SRC_REQUIREMENTS_H #include #include @@ -457,4 +457,4 @@ class deduped_requirement_data std::vector alternatives_; }; -#endif +#endif // CATA_SRC_REQUIREMENTS_H diff --git a/src/ret_val.h b/src/ret_val.h index 6eebd086939cf..024ddbec7b786 100644 --- a/src/ret_val.h +++ b/src/ret_val.h @@ -1,6 +1,6 @@ #pragma once -#ifndef RET_VAL_H -#define RET_VAL_H +#ifndef CATA_SRC_RET_VAL_H +#define CATA_SRC_RET_VAL_H #include #include @@ -98,4 +98,4 @@ struct ret_val::default_success : public std::integral_constant struct ret_val::default_failure : public std::integral_constant {}; -#endif // RET_VAL_H +#endif // CATA_SRC_RET_VAL_H diff --git a/src/rng.h b/src/rng.h index 3fda3c67c2034..b4c07aa7e7b55 100644 --- a/src/rng.h +++ b/src/rng.h @@ -1,6 +1,6 @@ #pragma once -#ifndef RNG_H -#define RNG_H +#ifndef CATA_SRC_RNG_H +#define CATA_SRC_RNG_H #include #include @@ -172,4 +172,4 @@ cata::optional random_point( const tripoint_range &range, cata::optional random_point( const map &m, const std::function &predicate ); -#endif +#endif // CATA_SRC_RNG_H diff --git a/src/rotatable_symbols.h b/src/rotatable_symbols.h index e908ba208bd6d..02d9d9d18e8b8 100644 --- a/src/rotatable_symbols.h +++ b/src/rotatable_symbols.h @@ -1,6 +1,6 @@ #pragma once -#ifndef ROTATABLE_SYMBOLS_H -#define ROTATABLE_SYMBOLS_H +#ifndef CATA_SRC_ROTATABLE_SYMBOLS_H +#define CATA_SRC_ROTATABLE_SYMBOLS_H #include #include @@ -21,4 +21,4 @@ uint32_t get( const uint32_t &symbol, int n ); } // namespace rotatable_symbols -#endif // ROTATABLE_SYMBOLS_H +#endif // CATA_SRC_ROTATABLE_SYMBOLS_H diff --git a/src/safe_reference.h b/src/safe_reference.h index 8392abb3d9c69..5e235e0af9a9e 100644 --- a/src/safe_reference.h +++ b/src/safe_reference.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CATA_SAFE_REFERENCE_H -#define CATA_SAFE_REFERENCE_H +#ifndef CATA_SRC_SAFE_REFERENCE_H +#define CATA_SRC_SAFE_REFERENCE_H /** A pair of classes to provide safe references to objects. @@ -70,4 +70,4 @@ class safe_reference_anchor std::shared_ptr impl; }; -#endif // CATA_SAFE_REFERENCE_H +#endif // CATA_SRC_SAFE_REFERENCE_H diff --git a/src/safemode_ui.h b/src/safemode_ui.h index bbb037ba8927f..3557d0b617292 100644 --- a/src/safemode_ui.h +++ b/src/safemode_ui.h @@ -1,6 +1,6 @@ #pragma once -#ifndef SAFEMODE_UI_H -#define SAFEMODE_UI_H +#ifndef CATA_SRC_SAFEMODE_UI_H +#define CATA_SRC_SAFEMODE_UI_H #include #include @@ -114,4 +114,4 @@ class safemode safemode &get_safemode(); -#endif +#endif // CATA_SRC_SAFEMODE_UI_H diff --git a/src/savegame_json.cpp b/src/savegame_json.cpp index 31e895f50a615..89bbab3b3f7ea 100644 --- a/src/savegame_json.cpp +++ b/src/savegame_json.cpp @@ -500,12 +500,12 @@ void Character::load( const JsonObject &data ) if( savegame_loading_version <= 23 ) { std::unordered_set old_my_mutations; data.read( "mutations", old_my_mutations ); - for( const auto &mut : old_my_mutations ) { + for( const trait_id &mut : old_my_mutations ) { my_mutations[mut]; // Creates a new entry with default values } std::map trait_keys; data.read( "mutation_keys", trait_keys ); - for( const auto &k : trait_keys ) { + for( const std::pair &k : trait_keys ) { my_mutations[k.first].key = k.second; } std::set active_muts; @@ -517,14 +517,14 @@ void Character::load( const JsonObject &data ) data.read( "mutations", my_mutations ); } for( auto it = my_mutations.begin(); it != my_mutations.end(); ) { - const auto &mid = it->first; + const trait_id &mid = it->first; if( mid.is_valid() ) { on_mutation_gain( mid ); cached_mutations.push_back( &mid.obj() ); ++it; } else { debugmsg( "character %s has invalid mutation %s, it will be ignored", name, mid.c_str() ); - my_mutations.erase( it++ ); + it = my_mutations.erase( it ); } } size_class = calculate_size( *this ); @@ -976,10 +976,10 @@ void avatar::store( JsonOut &json ) const json.member( "focus_pool", focus_pool ); // stats through kills - json.member( "str_upgrade", abs( str_upgrade ) ); - json.member( "dex_upgrade", abs( dex_upgrade ) ); - json.member( "int_upgrade", abs( int_upgrade ) ); - json.member( "per_upgrade", abs( per_upgrade ) ); + json.member( "str_upgrade", std::abs( str_upgrade ) ); + json.member( "dex_upgrade", std::abs( dex_upgrade ) ); + json.member( "int_upgrade", std::abs( int_upgrade ) ); + json.member( "per_upgrade", std::abs( per_upgrade ) ); // targeting if( activity.id() == ACT_AIM ) { diff --git a/src/scenario.cpp b/src/scenario.cpp index aa45d84d3d0e9..33a3d61dd2e59 100644 --- a/src/scenario.cpp +++ b/src/scenario.cpp @@ -110,7 +110,7 @@ const scenario *scenario::weighted_random() while( true ) { const scenario &scen = random_entry_ref( list ); - if( x_in_y( 2, abs( scen.point_cost() ) + 2 ) ) { + if( x_in_y( 2, std::abs( scen.point_cost() ) + 2 ) ) { return &scen; } // else reroll in the while loop. diff --git a/src/scenario.h b/src/scenario.h index fe6feea21faa5..6abeaa95ce939 100644 --- a/src/scenario.h +++ b/src/scenario.h @@ -1,6 +1,6 @@ #pragma once -#ifndef SCENARIO_H -#define SCENARIO_H +#ifndef CATA_SRC_SCENARIO_H +#define CATA_SRC_SCENARIO_H #include #include @@ -125,4 +125,4 @@ struct scen_blacklist { void reset_scenarios_blacklist(); -#endif +#endif // CATA_SRC_SCENARIO_H diff --git a/src/scent_block.h b/src/scent_block.h index be9c956c443b0..09ee1d662f49e 100644 --- a/src/scent_block.h +++ b/src/scent_block.h @@ -1,6 +1,6 @@ #pragma once -#ifndef SCENT_BLOCK_H -#define SCENT_BLOCK_H +#ifndef CATA_SRC_SCENT_BLOCK_H +#define CATA_SRC_SCENT_BLOCK_H #include #include @@ -102,4 +102,4 @@ struct scent_block { } }; -#endif +#endif // CATA_SRC_SCENT_BLOCK_H diff --git a/src/scent_map.h b/src/scent_map.h index d610081d4f7dc..55209d65201e5 100644 --- a/src/scent_map.h +++ b/src/scent_map.h @@ -1,6 +1,6 @@ #pragma once -#ifndef SCENT_H -#define SCENT_H +#ifndef CATA_SRC_SCENT_MAP_H +#define CATA_SRC_SCENT_MAP_H #include #include @@ -85,4 +85,4 @@ class scent_map } }; -#endif +#endif // CATA_SRC_SCENT_MAP_H diff --git a/src/scores_ui.cpp b/src/scores_ui.cpp index 12e973a679f61..b3840176f0166 100644 --- a/src/scores_ui.cpp +++ b/src/scores_ui.cpp @@ -5,6 +5,7 @@ #include #include +#include "achievement.h" #include "color.h" #include "cursesdef.h" #include "event_statistics.h" @@ -17,6 +18,31 @@ #include "ui.h" #include "ui_manager.h" +static std::string get_achievements_text( const achievements_tracker &achievements ) +{ + std::string os; + std::vector valid_achievements = achievements.valid_achievements(); + using sortable_achievement = + std::tuple; + std::vector sortable_achievements; + std::transform( valid_achievements.begin(), valid_achievements.end(), + std::back_inserter( sortable_achievements ), + [&]( const achievement * ach ) { + achievement_completion comp = achievements.is_completed( ach->id ); + return std::make_tuple( comp, ach->description().translated(), ach ); + } ); + std::sort( sortable_achievements.begin(), sortable_achievements.end() ); + for( const sortable_achievement &ach : sortable_achievements ) { + os += achievements.ui_text_for( std::get( ach ) ); + } + if( valid_achievements.empty() ) { + os += _( "This game has no valid achievements.\n" ); + } + os += _( "\nNote that only achievements that existed when you started this game and still " + "exist now will appear here." ); + return os; +} + static std::string get_scores_text( stats_tracker &stats ) { std::string os; @@ -32,21 +58,25 @@ static std::string get_scores_text( stats_tracker &stats ) return os; } -void show_scores_ui( stats_tracker &stats, const kill_tracker &kills ) +void show_scores_ui( const achievements_tracker &achievements, stats_tracker &stats, + const kill_tracker &kills ) { catacurses::window w = new_centered_win( FULL_SCREEN_HEIGHT, FULL_SCREEN_WIDTH ); enum class tab_mode { + achievements, scores, kills, num_tabs, - first_tab = scores, + first_tab = achievements, }; tab_mode tab = static_cast( 0 ); input_context ctxt( "SCORES" ); ctxt.register_cardinal(); ctxt.register_action( "QUIT" ); + ctxt.register_action( "PREV_TAB" ); + ctxt.register_action( "NEXT_TAB" ); ctxt.register_action( "HELP_KEYBINDINGS" ); catacurses::window w_view = catacurses::newwin( getmaxy( w ) - 4, getmaxx( w ) - 1, @@ -61,6 +91,7 @@ void show_scores_ui( stats_tracker &stats, const kill_tracker &kills ) werase( w ); const std::vector> tabs = { + { tab_mode::achievements, _( "ACHIEVEMENTS" ) }, { tab_mode::scores, _( "SCORES" ) }, { tab_mode::kills, _( "KILLS" ) }, }; @@ -69,6 +100,9 @@ void show_scores_ui( stats_tracker &stats, const kill_tracker &kills ) if( new_tab ) { switch( tab ) { + case tab_mode::achievements: + view.set_text( get_achievements_text( achievements ) ); + break; case tab_mode::scores: view.set_text( get_scores_text( stats ) ); break; @@ -87,13 +121,13 @@ void show_scores_ui( stats_tracker &stats, const kill_tracker &kills ) const std::string action = ctxt.handle_input(); new_tab = false; - if( action == "RIGHT" ) { + if( action == "RIGHT" || action == "NEXT_TAB" ) { tab = static_cast( static_cast( tab ) + 1 ); if( tab >= tab_mode::num_tabs ) { tab = tab_mode::first_tab; } new_tab = true; - } else if( action == "LEFT" ) { + } else if( action == "LEFT" || action == "PREV_TAB" ) { tab = static_cast( static_cast( tab ) - 1 ); if( tab < tab_mode::first_tab ) { tab = static_cast( static_cast( tab_mode::num_tabs ) - 1 ); @@ -103,9 +137,7 @@ void show_scores_ui( stats_tracker &stats, const kill_tracker &kills ) view.scroll_down(); } else if( action == "UP" ) { view.scroll_up(); - } else if( action == "CONFIRM" ) { - break; - } else if( action == "QUIT" ) { + } else if( action == "CONFIRM" || action == "QUIT" ) { break; } } diff --git a/src/scores_ui.h b/src/scores_ui.h index 7ff135241b86c..688bb6c2ce7fe 100644 --- a/src/scores_ui.h +++ b/src/scores_ui.h @@ -1,9 +1,11 @@ -#ifndef CATA_SCORES_UI_HPP -#define CATA_SCORES_UI_HPP +#ifndef CATA_SRC_SCORES_UI_H +#define CATA_SRC_SCORES_UI_H +class achievements_tracker; class kill_tracker; class stats_tracker; -void show_scores_ui( stats_tracker &, const kill_tracker & ); +void show_scores_ui( const achievements_tracker &achievements, stats_tracker &, + const kill_tracker & ); -#endif // CATA_SCORES_UI_HPP +#endif // CATA_SRC_SCORES_UI_H diff --git a/src/sdl_utils.h b/src/sdl_utils.h index 7b106c47b18c2..5c76560799cd2 100644 --- a/src/sdl_utils.h +++ b/src/sdl_utils.h @@ -1,6 +1,6 @@ #pragma once -#ifndef SDL_UTILS_H -#define SDL_UTILS_H +#ifndef CATA_SRC_SDL_UTILS_H +#define CATA_SRC_SDL_UTILS_H #include #include @@ -139,7 +139,8 @@ inline SDL_Color color_pixel_sepia( const SDL_Color &color ) const Uint8 av = average_pixel_color( color ); const float gammav = 1.6; const float pv = av / 255.0; - const Uint8 finalv = std::min( int( round( pow( pv, gammav ) * 150 ) ), 100 ); + const Uint8 finalv = + std::min( static_cast( std::round( std::pow( pv, gammav ) * 150 ) ), 100 ); return mix_colors( sepia_dark, sepia_light, finalv ); } @@ -169,4 +170,4 @@ SDL_Rect fit_rect_inside( const SDL_Rect &inner, const SDL_Rect &outer ); std::vector color_linear_interpolate( const SDL_Color &start_color, const SDL_Color &end_color, unsigned additional_steps ); -#endif // SDL_UTILS_H +#endif // CATA_SRC_SDL_UTILS_H diff --git a/src/sdl_wrappers.h b/src/sdl_wrappers.h index 2e56e6cef4162..c42389c2830a1 100644 --- a/src/sdl_wrappers.h +++ b/src/sdl_wrappers.h @@ -1,6 +1,6 @@ #pragma once -#ifndef SDL_WRAPPERS_H -#define SDL_WRAPPERS_H +#ifndef CATA_SRC_SDL_WRAPPERS_H +#define CATA_SRC_SDL_WRAPPERS_H // IWYU pragma: begin_exports #if defined(_MSC_VER) && defined(USE_VCPKG) @@ -135,4 +135,4 @@ inline bool operator!=( const SDL_Rect &lhs, const SDL_Rect &rhs ) /**@}*/ -#endif +#endif // CATA_SRC_SDL_WRAPPERS_H diff --git a/src/sdlsound.h b/src/sdlsound.h index 8c4ed14d31553..813c81ad7e3e6 100644 --- a/src/sdlsound.h +++ b/src/sdlsound.h @@ -1,6 +1,6 @@ #pragma once -#ifndef SDL_SOUND_H -#define SDL_SOUND_H +#ifndef CATA_SRC_SDLSOUND_H +#define CATA_SRC_SDLSOUND_H #include #if defined(SDL_SOUND) @@ -30,4 +30,4 @@ inline void load_soundset() { } #endif -#endif +#endif // CATA_SRC_SDLSOUND_H diff --git a/src/sdltiles.cpp b/src/sdltiles.cpp index b2b3f78d91e3f..6d4f3e64b0f9d 100644 --- a/src/sdltiles.cpp +++ b/src/sdltiles.cpp @@ -3777,8 +3777,8 @@ cata::optional input_context::get_coordinates( const catacurses::windo if( tile_iso && use_tiles ) { const float win_mid_x = win_min.x + win_size.x / 2.0f; const float win_mid_y = -win_min.y + win_size.y / 2.0f; - const int screen_col = round( ( screen_pos.x - win_mid_x ) / ( fw / 2.0 ) ); - const int screen_row = round( ( screen_pos.y - win_mid_y ) / ( fw / 4.0 ) ); + const int screen_col = std::round( ( screen_pos.x - win_mid_x ) / ( fw / 2.0 ) ); + const int screen_row = std::round( ( screen_pos.y - win_mid_y ) / ( fw / 4.0 ) ); const point selected( ( screen_col - screen_row ) / 2, ( screen_row + screen_col ) / 2 ); p = view_offset + selected; } else { diff --git a/src/sdltiles.h b/src/sdltiles.h index 433561148e03d..34a3e457d78c9 100644 --- a/src/sdltiles.h +++ b/src/sdltiles.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CATA_SDLTILES_H -#define CATA_SDLTILES_H +#ifndef CATA_SRC_SDLTILES_H +#define CATA_SRC_SDLTILES_H #include #if defined(TILES) @@ -42,4 +42,4 @@ window_dimensions get_window_dimensions( const catacurses::window &win ); #endif // TILES -#endif // CATA_SDLTILES_H +#endif // CATA_SRC_SDLTILES_H diff --git a/src/shadowcasting.h b/src/shadowcasting.h index af891a9e200b5..6538cecdce612 100644 --- a/src/shadowcasting.h +++ b/src/shadowcasting.h @@ -1,6 +1,6 @@ #pragma once -#ifndef SHADOWCASTING_H -#define SHADOWCASTING_H +#ifndef CATA_SRC_SHADOWCASTING_H +#define CATA_SRC_SHADOWCASTING_H #include #include @@ -123,4 +123,4 @@ void cast_zlight( const array_of_grids_of &floor_caches, const tripoint &origin, int offset_distance, T numerator ); -#endif +#endif // CATA_SRC_SHADOWCASTING_H diff --git a/src/simple_pathfinding.h b/src/simple_pathfinding.h index 31b3c5becc8f9..260a9608f76f4 100644 --- a/src/simple_pathfinding.h +++ b/src/simple_pathfinding.h @@ -1,6 +1,6 @@ #pragma once -#ifndef SIMPLE_PATHFINDINDING_H -#define SIMPLE_PATHFINDINDING_H +#ifndef CATA_SRC_SIMPLE_PATHFINDING_H +#define CATA_SRC_SIMPLE_PATHFINDING_H #include #include @@ -183,4 +183,4 @@ inline path straight_path( const point &source, } // namespace pf -#endif +#endif // CATA_SRC_SIMPLE_PATHFINDING_H diff --git a/src/simplexnoise.h b/src/simplexnoise.h index c233b9624b34f..5688f9c1141c9 100644 --- a/src/simplexnoise.h +++ b/src/simplexnoise.h @@ -16,8 +16,8 @@ * */ -#ifndef SIMPLEX_H -#define SIMPLEX_H +#ifndef CATA_SRC_SIMPLEXNOISE_H +#define CATA_SRC_SIMPLEXNOISE_H /* 2D, 3D and 4D Simplex Noise functions return 'random' values in (-1, 1). @@ -181,4 +181,4 @@ static const int simplex[64][4] = { {2, 1, 0, 3}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {3, 1, 0, 2}, {0, 0, 0, 0}, {3, 2, 0, 1}, {3, 2, 1, 0} }; -#endif +#endif // CATA_SRC_SIMPLEXNOISE_H diff --git a/src/skill.h b/src/skill.h index af5e4cee4094e..d5849c5171d19 100644 --- a/src/skill.h +++ b/src/skill.h @@ -1,6 +1,6 @@ #pragma once -#ifndef SKILL_H -#define SKILL_H +#ifndef CATA_SRC_SKILL_H +#define CATA_SRC_SKILL_H #include #include @@ -249,4 +249,4 @@ class SkillDisplayType double price_adjustment( int ); -#endif +#endif // CATA_SRC_SKILL_H diff --git a/src/skill_boost.h b/src/skill_boost.h index 471006c9626fb..796a795c43ebb 100644 --- a/src/skill_boost.h +++ b/src/skill_boost.h @@ -1,6 +1,6 @@ #pragma once -#ifndef SKILL_BOOST_H -#define SKILL_BOOST_H +#ifndef CATA_SRC_SKILL_BOOST_H +#define CATA_SRC_SKILL_BOOST_H #include #include @@ -39,4 +39,4 @@ class skill_boost void load( const JsonObject &jo, const std::string &src ); }; -#endif +#endif // CATA_SRC_SKILL_BOOST_H diff --git a/src/sounds.cpp b/src/sounds.cpp index 8940de8fed3e4..421e797b7a6cb 100644 --- a/src/sounds.cpp +++ b/src/sounds.cpp @@ -199,7 +199,7 @@ static std::vector cluster_sounds( std::vector( 10 ) ), - static_cast( log( input_sounds.size() ) ) ); + static_cast( std::log( input_sounds.size() ) ) ); const size_t stopping_point = input_sounds.size() - num_seed_clusters; const size_t max_map_distance = rl_dist( point_zero, point( MAPSIZE_X, MAPSIZE_Y ) ); // Randomly choose cluster seeds. @@ -361,7 +361,7 @@ void sounds::process_sound_markers( player *p ) const tripoint &pos = sound_event_pair.first; const sound_event &sound = sound_event_pair.second; const int distance_to_sound = rl_dist( p->pos().xy(), pos.xy() ) + - abs( p->pos().z - pos.z ) * 10; + std::abs( p->pos().z - pos.z ) * 10; const int raw_volume = sound.volume; // The felt volume of a sound is not affected by negative multipliers, such as already diff --git a/src/sounds.h b/src/sounds.h index 59e8fdd55b6b8..1420f41702410 100644 --- a/src/sounds.h +++ b/src/sounds.h @@ -1,6 +1,6 @@ #pragma once -#ifndef SOUNDS_H -#define SOUNDS_H +#ifndef CATA_SRC_SOUNDS_H +#define CATA_SRC_SOUNDS_H #include #include @@ -163,4 +163,4 @@ void do_fatigue(); void do_obstacle( const std::string &obst = "" ); } // namespace sfx -#endif +#endif // CATA_SRC_SOUNDS_H diff --git a/src/speech.h b/src/speech.h index a08408ef8748b..984e819a39d96 100644 --- a/src/speech.h +++ b/src/speech.h @@ -1,6 +1,6 @@ #pragma once -#ifndef SPEECH_H -#define SPEECH_H +#ifndef CATA_SRC_SPEECH_H +#define CATA_SRC_SPEECH_H #include "translations.h" @@ -17,4 +17,4 @@ void load_speech( const JsonObject &jo ); void reset_speech(); const SpeechBubble &get_speech( const std::string &label ); -#endif +#endif // CATA_SRC_SPEECH_H diff --git a/src/start_location.h b/src/start_location.h index f1c5c8417e7ab..d28829d4bbb5b 100644 --- a/src/start_location.h +++ b/src/start_location.h @@ -1,6 +1,6 @@ #pragma once -#ifndef START_LOCATION_H -#define START_LOCATION_H +#ifndef CATA_SRC_START_LOCATION_H +#define CATA_SRC_START_LOCATION_H #include #include @@ -89,4 +89,4 @@ const std::vector &get_all(); } // namespace start_locations -#endif // START_LOCATION_H +#endif // CATA_SRC_START_LOCATION_H diff --git a/src/stats_tracker.h b/src/stats_tracker.h index 5819f7dc380d1..748820a03dd9e 100644 --- a/src/stats_tracker.h +++ b/src/stats_tracker.h @@ -1,5 +1,5 @@ -#ifndef CATA_STATS_TRACKER_H -#define CATA_STATS_TRACKER_H +#ifndef CATA_SRC_STATS_TRACKER_H +#define CATA_SRC_STATS_TRACKER_H #include #include @@ -152,4 +152,4 @@ class stats_tracker : public event_subscriber std::unordered_set> initial_scores; }; -#endif // CATA_STATS_TRACKER_H +#endif // CATA_SRC_STATS_TRACKER_H diff --git a/src/stomach.cpp b/src/stomach.cpp index 5df733519afa6..884a70a767ae0 100644 --- a/src/stomach.cpp +++ b/src/stomach.cpp @@ -253,7 +253,7 @@ stomach_digest_rates stomach_contents::get_digest_rates( const needs_rates &meta rates.water = 250_ml; rates.min_kcal = roll_remainder( metabolic_rates.kcal / 24.0 * metabolic_rates.hunger ); rates.percent_kcal = 0.05f * metabolic_rates.hunger; - rates.min_vitamin = round( 100.0 / 24.0 * metabolic_rates.hunger ); + rates.min_vitamin = std::round( 100.0 / 24.0 * metabolic_rates.hunger ); rates.percent_vitamin = 0.05f * metabolic_rates.hunger; } return rates; @@ -271,7 +271,7 @@ void stomach_contents::mod_calories( int cal ) void stomach_contents::mod_nutr( int nutr ) { // nutr is legacy type code, this function simply converts old nutrition to new kcal - mod_calories( -1 * round( nutr * 2500.0f / ( 12 * 24 ) ) ); + mod_calories( -1 * std::round( nutr * 2500.0f / ( 12 * 24 ) ) ); } void stomach_contents::mod_water( units::volume h2o ) diff --git a/src/stomach.h b/src/stomach.h index 502450808c772..47878018c23a8 100644 --- a/src/stomach.h +++ b/src/stomach.h @@ -1,4 +1,6 @@ #pragma once +#ifndef CATA_SRC_STOMACH_H +#define CATA_SRC_STOMACH_H #include @@ -171,3 +173,5 @@ class stomach_contents const Character &owner ); }; + +#endif // CATA_SRC_STOMACH_H diff --git a/src/string_formatter.h b/src/string_formatter.h index 0390eaed33700..5c9220470dbf8 100644 --- a/src/string_formatter.h +++ b/src/string_formatter.h @@ -1,6 +1,6 @@ #pragma once -#ifndef STRING_FORMATTER_H -#define STRING_FORMATTER_H +#ifndef CATA_SRC_STRING_FORMATTER_H +#define CATA_SRC_STRING_FORMATTER_H #include #include @@ -425,4 +425,4 @@ string_format( T &&format, Args &&...args ) } /**@}*/ -#endif +#endif // CATA_SRC_STRING_FORMATTER_H diff --git a/src/string_id.h b/src/string_id.h index 5b2a396f89ca9..7eb3cb0373f66 100644 --- a/src/string_id.h +++ b/src/string_id.h @@ -1,6 +1,6 @@ #pragma once -#ifndef STRING_ID_H -#define STRING_ID_H +#ifndef CATA_SRC_STRING_ID_H +#define CATA_SRC_STRING_ID_H #include #include @@ -208,4 +208,4 @@ struct hash< string_id > { }; } // namespace std -#endif +#endif // CATA_SRC_STRING_ID_H diff --git a/src/string_input_popup.h b/src/string_input_popup.h index 4eba691e54526..a6511ed8c253a 100644 --- a/src/string_input_popup.h +++ b/src/string_input_popup.h @@ -1,6 +1,6 @@ #pragma once -#ifndef STRING_INPUT_POPUP_H -#define STRING_INPUT_POPUP_H +#ifndef CATA_SRC_STRING_INPUT_POPUP_H +#define CATA_SRC_STRING_INPUT_POPUP_H #include #include @@ -266,4 +266,4 @@ class string_input_popup // NOLINT(cata-xy) std::map> callbacks; }; -#endif +#endif // CATA_SRC_STRING_INPUT_POPUP_H diff --git a/src/submap.h b/src/submap.h index eae96c631b960..ad0e510647817 100644 --- a/src/submap.h +++ b/src/submap.h @@ -1,6 +1,6 @@ #pragma once -#ifndef SUBMAP_H -#define SUBMAP_H +#ifndef CATA_SRC_SUBMAP_H +#define CATA_SRC_SUBMAP_H #include #include @@ -349,4 +349,4 @@ struct maptile { } }; -#endif +#endif // CATA_SRC_SUBMAP_H diff --git a/src/suffer.cpp b/src/suffer.cpp index f014d9465a183..1c37b2b760aeb 100644 --- a/src/suffer.cpp +++ b/src/suffer.cpp @@ -182,7 +182,7 @@ void Character::suffer_water_damage( const mutation_branch &mdata ) _( "'s %s is damaged by the water." ), body_part_name( bp ) ); } else if( dmg < 0 && hp_cur[bp_to_hp( bp )] != hp_max[bp_to_hp( bp )] ) { - heal( bp, abs( dmg ) ); + heal( bp, std::abs( dmg ) ); add_msg_player_or_npc( m_good, _( "Your %s is healed by the water." ), _( "'s %s is healed by the water." ), body_part_name( bp ) ); @@ -912,7 +912,7 @@ void Character::suffer_from_other_mutations() if( bp == bp_head ) { continue; } - int sores_pain = 5 + 0.4 * abs( encumb( bp ) ); + int sores_pain = 5 + 0.4 * std::abs( encumb( bp ) ); if( get_pain() < sores_pain ) { set_pain( sores_pain ); } @@ -1599,8 +1599,8 @@ void Character::mend( int rate_multiplier ) // Very hungry starts lowering the chance // square rooting the value makes the numbers drop off faster when below 1 - healing_factor *= sqrt( static_cast( get_stored_kcal() ) / static_cast - ( get_healthy_kcal() ) ); + healing_factor *= std::sqrt( static_cast( get_stored_kcal() ) / static_cast + ( get_healthy_kcal() ) ); // Similar for thirst - starts at very thirsty, drops to 0 ~halfway between two last statuses healing_factor *= 1.0f - clamp( ( get_thirst() - 80.0f ) / 300.0f, 0.0f, 1.0f ); diff --git a/src/teleport.h b/src/teleport.h index 7e5ada5a9210b..f6293315497b5 100644 --- a/src/teleport.h +++ b/src/teleport.h @@ -1,6 +1,6 @@ #pragma once -#ifndef TELEPORT_H -#define TELEPORT_H +#ifndef CATA_SRC_TELEPORT_H +#define CATA_SRC_TELEPORT_H class Creature; @@ -14,4 +14,4 @@ bool teleport( Creature &critter, int min_distance = 2, int max_distance = 12, bool add_teleglow = true ); } // namespace teleport -#endif +#endif // CATA_SRC_TELEPORT_H diff --git a/src/text_snippets.h b/src/text_snippets.h index c7348e87b90da..ad1e16b2a484b 100644 --- a/src/text_snippets.h +++ b/src/text_snippets.h @@ -1,6 +1,6 @@ #pragma once -#ifndef TEXT_SNIPPETS_H -#define TEXT_SNIPPETS_H +#ifndef CATA_SRC_TEXT_SNIPPETS_H +#define CATA_SRC_TEXT_SNIPPETS_H #include #include @@ -114,4 +114,4 @@ class snippet_library extern snippet_library SNIPPET; -#endif +#endif // CATA_SRC_TEXT_SNIPPETS_H diff --git a/src/text_style_check.h b/src/text_style_check.h index 853ca0f01f653..2d91207843f8a 100644 --- a/src/text_style_check.h +++ b/src/text_style_check.h @@ -1,6 +1,6 @@ #pragma once -#ifndef TEXT_STYLE_CHECK_H -#define TEXT_STYLE_CHECK_H +#ifndef CATA_SRC_TEXT_STYLE_CHECK_H +#define CATA_SRC_TEXT_STYLE_CHECK_H // This is used in both the game itself and the clang-tidy check, // so only system headers should be included here. @@ -199,4 +199,4 @@ void text_style_check( Iter beg, Iter end, } } -#endif // TEXT_STYLE_CHECK +#endif // CATA_SRC_TEXT_STYLE_CHECK_H diff --git a/src/tileray.cpp b/src/tileray.cpp index a8a2830d0c5cd..c1248bc60132a 100644 --- a/src/tileray.cpp +++ b/src/tileray.cpp @@ -189,7 +189,7 @@ void tileray::advance( int num ) if( num == 0 ) { return; } - int anum = abs( num ); + int anum = std::abs( num ); steps = anum; const bool vertical = mostly_vertical(); if( direction % 90 ) { diff --git a/src/tileray.h b/src/tileray.h index 03506ff008f95..2eb7e99c5f07f 100644 --- a/src/tileray.h +++ b/src/tileray.h @@ -1,6 +1,6 @@ #pragma once -#ifndef TILERAY_H -#define TILERAY_H +#ifndef CATA_SRC_TILERAY_H +#define CATA_SRC_TILERAY_H #include "point.h" @@ -58,4 +58,4 @@ class tileray bool end(); // do we reach the end of (dx,dy) defined ray? }; -#endif +#endif // CATA_SRC_TILERAY_H diff --git a/src/timed_event.h b/src/timed_event.h index a3a2a6b7820ab..7b43fa5bd7b75 100644 --- a/src/timed_event.h +++ b/src/timed_event.h @@ -1,6 +1,6 @@ #pragma once -#ifndef TIMED_EVENT_H -#define TIMED_EVENT_H +#ifndef CATA_SRC_TIMED_EVENT_H +#define CATA_SRC_TIMED_EVENT_H #include @@ -66,4 +66,4 @@ class timed_event_manager void process(); }; -#endif +#endif // CATA_SRC_TIMED_EVENT_H diff --git a/src/trait_group.h b/src/trait_group.h index 1423604b79833..c6993439acc80 100644 --- a/src/trait_group.h +++ b/src/trait_group.h @@ -1,6 +1,6 @@ #pragma once -#ifndef TRAIT_GROUP_H -#define TRAIT_GROUP_H +#ifndef CATA_SRC_TRAIT_GROUP_H +#define CATA_SRC_TRAIT_GROUP_H #include #include @@ -201,4 +201,4 @@ class Trait_group_distribution : public Trait_group void add_entry( std::unique_ptr ptr ) override; }; -#endif +#endif // CATA_SRC_TRAIT_GROUP_H diff --git a/src/translations.h b/src/translations.h index d2a0dfa83db5e..68eed6ab126c3 100644 --- a/src/translations.h +++ b/src/translations.h @@ -1,6 +1,6 @@ #pragma once -#ifndef TRANSLATIONS_H -#define TRANSLATIONS_H +#ifndef CATA_SRC_TRANSLATIONS_H +#define CATA_SRC_TRANSLATIONS_H #include #include @@ -244,4 +244,4 @@ std::string operator+( const translation &lhs, const std::string &rhs ); std::string operator+( const std::string &lhs, const translation &rhs ); std::string operator+( const translation &lhs, const translation &rhs ); -#endif // _TRANSLATIONS_H_ +#endif // CATA_SRC_TRANSLATIONS_H diff --git a/src/trap.h b/src/trap.h index 9505c2b1c4181..3d7691739f5f8 100644 --- a/src/trap.h +++ b/src/trap.h @@ -1,6 +1,6 @@ #pragma once -#ifndef TRAP_H -#define TRAP_H +#ifndef CATA_SRC_TRAP_H +#define CATA_SRC_TRAP_H #include #include @@ -299,4 +299,4 @@ tr_shadow, tr_drain, tr_snake; -#endif +#endif // CATA_SRC_TRAP_H diff --git a/src/type_id.h b/src/type_id.h index ba5506a12f6e3..1a6431c82cd17 100644 --- a/src/type_id.h +++ b/src/type_id.h @@ -1,6 +1,6 @@ #pragma once -#ifndef TYPE_ID_H -#define TYPE_ID_H +#ifndef CATA_SRC_TYPE_ID_H +#define CATA_SRC_TYPE_ID_H #include "int_id.h" #include "string_id.h" @@ -170,4 +170,4 @@ struct construction; using construction_id = int_id; using construction_str_id = string_id; -#endif // TYPE_ID_H +#endif // CATA_SRC_TYPE_ID_H diff --git a/src/ui.h b/src/ui.h index ece0cd5f1f8d8..b5c008e9dd4a9 100644 --- a/src/ui.h +++ b/src/ui.h @@ -1,6 +1,6 @@ #pragma once -#ifndef UI_H -#define UI_H +#ifndef CATA_SRC_UI_H +#define CATA_SRC_UI_H #include #include @@ -299,4 +299,4 @@ class pointmenu_cb : public uilist_callback void refresh( uilist *menu ) override; }; -#endif +#endif // CATA_SRC_UI_H diff --git a/src/ui_manager.h b/src/ui_manager.h index 9ada2fba5e28e..2ab2a41c24f7a 100644 --- a/src/ui_manager.h +++ b/src/ui_manager.h @@ -1,6 +1,6 @@ #pragma once -#ifndef UI_MANAGER_H -#define UI_MANAGER_H +#ifndef CATA_SRC_UI_MANAGER_H +#define CATA_SRC_UI_MANAGER_H #include @@ -94,4 +94,4 @@ void redraw(); void screen_resized(); } // namespace ui_manager -#endif +#endif // CATA_SRC_UI_MANAGER_H diff --git a/src/uistate.h b/src/uistate.h index 355ec4c947e35..e673a92996bee 100644 --- a/src/uistate.h +++ b/src/uistate.h @@ -1,6 +1,6 @@ #pragma once -#ifndef UISTATE_H -#define UISTATE_H +#ifndef CATA_SRC_UISTATE_H +#define CATA_SRC_UISTATE_H #include #include @@ -275,4 +275,4 @@ class uistatedata }; extern uistatedata uistate; -#endif +#endif // CATA_SRC_UISTATE_H diff --git a/src/units.h b/src/units.h index 505204be4a810..c457606ceccca 100644 --- a/src/units.h +++ b/src/units.h @@ -1,6 +1,6 @@ #pragma once -#ifndef UNITS_H -#define UNITS_H +#ifndef CATA_SRC_UNITS_H +#define CATA_SRC_UNITS_H #include #include @@ -775,4 +775,4 @@ void dump_to_json_string( T t, JsonOut &jsout, jsout.write( str ); } -#endif +#endif // CATA_SRC_UNITS_H diff --git a/src/value_ptr.h b/src/value_ptr.h index a89c894a915e1..a5fefb10c7317 100644 --- a/src/value_ptr.h +++ b/src/value_ptr.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CATA_VALUE_PTR_H -#define CATA_VALUE_PTR_H +#ifndef CATA_SRC_VALUE_PTR_H +#define CATA_SRC_VALUE_PTR_H #include @@ -55,4 +55,4 @@ value_ptr make_value( Args &&...args ) } // namespace cata -#endif // CATA_VALUE_PTR_H +#endif // CATA_SRC_VALUE_PTR_H diff --git a/src/veh_interact.cpp b/src/veh_interact.cpp index 1b7e44f9d1cae..5c6130b798f4b 100644 --- a/src/veh_interact.cpp +++ b/src/veh_interact.cpp @@ -90,7 +90,7 @@ static double jack_quality( const vehicle &veh ) { const units::quantity mass = std::min( veh.total_mass(), JACK_LIMIT ); - return ceil( mass / TOOL_LIFT_FACTOR ); + return std::ceil( mass / TOOL_LIFT_FACTOR ); } /** Can part currently be reloaded with anything? */ @@ -607,7 +607,7 @@ task_reason veh_interact::cant_do( char mode ) return UNKNOWN_TASK; } - if( abs( veh->velocity ) > 100 || g->u.controlling_vehicle ) { + if( std::abs( veh->velocity ) > 100 || g->u.controlling_vehicle ) { return MOVING_VEHICLE; } if( !valid_target ) { @@ -1375,7 +1375,7 @@ bool veh_interact::overview( std::function enabl }; headers["BATTERY"] = [epower_w]( const catacurses::window & w, int y ) { std::string batt; - if( abs( epower_w ) < 10000 ) { + if( std::abs( epower_w ) < 10000 ) { batt = string_format( _( "Batteries: %s%+4d W" ), health_color( epower_w >= 0 ), epower_w ); } else { @@ -1745,7 +1745,8 @@ bool veh_interact::can_remove_part( int idx, const player &p ) use_str = g->u.can_lift( *veh ); } else { qual = qual_LIFT; - lvl = ceil( units::quantity( base.weight() ) / TOOL_LIFT_FACTOR ); + lvl = std::ceil( units::quantity( base.weight() ) / + TOOL_LIFT_FACTOR ); str = base.lift_strength(); use_aid = max_lift >= lvl; use_str = g->u.can_lift( base ); diff --git a/src/veh_interact.h b/src/veh_interact.h index 72b539bf365a3..2cb78e140d5d8 100644 --- a/src/veh_interact.h +++ b/src/veh_interact.h @@ -1,6 +1,6 @@ #pragma once -#ifndef VEH_INTERACT_H -#define VEH_INTERACT_H +#ifndef CATA_SRC_VEH_INTERACT_H +#define CATA_SRC_VEH_INTERACT_H #include #include @@ -225,4 +225,4 @@ class veh_interact bool can_self_jack(); }; -#endif +#endif // CATA_SRC_VEH_INTERACT_H diff --git a/src/veh_type.h b/src/veh_type.h index 2915c3e2ee046..271ca8e716c9a 100644 --- a/src/veh_type.h +++ b/src/veh_type.h @@ -1,6 +1,6 @@ #pragma once -#ifndef VEH_TYPE_H -#define VEH_TYPE_H +#ifndef CATA_SRC_VEH_TYPE_H +#define CATA_SRC_VEH_TYPE_H #include #include @@ -410,4 +410,4 @@ struct vehicle_prototype { static std::vector get_all(); }; -#endif +#endif // CATA_SRC_VEH_TYPE_H diff --git a/src/veh_utils.cpp b/src/veh_utils.cpp index c22709d5b0a7e..0270d18e66a3f 100644 --- a/src/veh_utils.cpp +++ b/src/veh_utils.cpp @@ -52,8 +52,8 @@ int calc_xp_gain( const vpart_info &vp, const skill_id &sk, const Character &who // 5: 3 xp /h // 6: 2 xp /h // 7+: 1 xp /h - return std::ceil( static_cast( vp.install_moves ) / to_moves( 1_minutes * pow( lvl, - 2 ) ) ); + return std::ceil( static_cast( vp.install_moves ) / + to_moves( 1_minutes * std::pow( lvl, 2 ) ) ); } vehicle_part &most_repairable_part( vehicle &veh, Character &who_arg, bool only_repairable ) diff --git a/src/veh_utils.h b/src/veh_utils.h index 187598fc91ab1..3e9ffe974651a 100644 --- a/src/veh_utils.h +++ b/src/veh_utils.h @@ -1,6 +1,6 @@ #pragma once -#ifndef VEH_UTILS_H -#define VEH_UTILS_H +#ifndef CATA_SRC_VEH_UTILS_H +#define CATA_SRC_VEH_UTILS_H #include "type_id.h" @@ -28,4 +28,4 @@ vehicle_part &most_repairable_part( vehicle &veh, Character &who_arg, bool repair_part( vehicle &veh, vehicle_part &pt, Character &who ); } // namespace veh_utils -#endif +#endif // CATA_SRC_VEH_UTILS_H diff --git a/src/vehicle.cpp b/src/vehicle.cpp index f49597bee46ec..bdd6e7c2f474a 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -4210,7 +4210,7 @@ float vehicle::strain() const if( velocity < sv && velocity > -sv ) { return 0; } else { - return static_cast( abs( velocity ) - sv ) / static_cast( mv - sv ); + return static_cast( std::abs( velocity ) - sv ) / static_cast( mv - sv ); } } @@ -4679,7 +4679,7 @@ void vehicle::update_alternator_load() } alternator_load = engine_vpower - ? 1000 * ( abs( alternators_power ) + abs( extra_drag ) ) / engine_vpower + ? 1000 * ( std::abs( alternators_power ) + std::abs( extra_drag ) ) / engine_vpower : 0; } else { alternator_load = 0; @@ -4752,7 +4752,7 @@ void vehicle::power_parts() charge_battery( delta_energy_bat ); } else if( epower < 0 ) { // draw epower deficit from battery - battery_deficit = discharge_battery( abs( delta_energy_bat ) ); + battery_deficit = discharge_battery( std::abs( delta_energy_bat ) ); } if( battery_deficit != 0 ) { @@ -5304,7 +5304,7 @@ void vehicle::gain_moves() } of_turn = 1 + of_turn_carry; const int vslowdown = slowdown( velocity ); - if( vslowdown > abs( velocity ) ) { + if( vslowdown > std::abs( velocity ) ) { if( cruise_on && cruise_velocity && pl_control ) { velocity = velocity > 0 ? 1 : -1; } else { @@ -5689,8 +5689,8 @@ void vehicle::refresh_pivot() const xc_numerator, xc_denominator, yc_numerator, yc_denominator ); pivot_cache = local_center_of_mass(); } else { - pivot_cache.x = round( xc_numerator / xc_denominator ); - pivot_cache.y = round( yc_numerator / yc_denominator ); + pivot_cache.x = std::round( xc_numerator / xc_denominator ); + pivot_cache.y = std::round( yc_numerator / yc_denominator ); } } @@ -5857,8 +5857,8 @@ void vehicle::set_tow_directions() { const int length = mount_max.x - mount_min.x + 1; const point mount_of_tow = parts[get_tow_part()].mount; - const point normalized_tow_mount = point( abs( mount_of_tow.x - mount_min.x ), - abs( mount_of_tow.y - mount_min.y ) ); + const point normalized_tow_mount = point( std::abs( mount_of_tow.x - mount_min.x ), + std::abs( mount_of_tow.y - mount_min.y ) ); if( length >= 3 ) { const int trisect = length / 3; if( normalized_tow_mount.x <= trisect ) { @@ -6655,7 +6655,7 @@ void vehicle::update_time( const time_point &update_to ) continue; } - double area = pow( pt.info().size / units::legacy_volume_factor, 2 ) * M_PI; + double area = std::pow( pt.info().size / units::legacy_volume_factor, 2 ) * M_PI; int qty = roll_remainder( funnel_charges_per_turn( area, accum_weather.rain_amount ) ); int c_qty = qty + ( tank->can_reload( water_clean ) ? tank->ammo_remaining() : 0 ); int cost_to_purify = c_qty * item::find_type( "water_purifier" )->charges_to_use(); @@ -6773,12 +6773,12 @@ void vehicle::calc_mass_center( bool use_precalc ) const const float x = xf / mass_cache; const float y = yf / mass_cache; if( use_precalc ) { - mass_center_precalc.x = round( x ); - mass_center_precalc.y = round( y ); + mass_center_precalc.x = std::round( x ); + mass_center_precalc.y = std::round( y ); mass_center_precalc_dirty = false; } else { - mass_center_no_precalc.x = round( x ); - mass_center_no_precalc.y = round( y ); + mass_center_no_precalc.x = std::round( x ); + mass_center_no_precalc.y = std::round( y ); mass_center_no_precalc_dirty = false; } } diff --git a/src/vehicle.h b/src/vehicle.h index 406bf2c79e0cb..a65823ad0492c 100644 --- a/src/vehicle.h +++ b/src/vehicle.h @@ -1,6 +1,6 @@ #pragma once -#ifndef VEHICLE_H -#define VEHICLE_H +#ifndef CATA_SRC_VEHICLE_H +#define CATA_SRC_VEHICLE_H #include #include @@ -1903,4 +1903,4 @@ class vehicle unsigned char vehicle_noise = 0; }; -#endif +#endif // CATA_SRC_VEHICLE_H diff --git a/src/vehicle_display.cpp b/src/vehicle_display.cpp index 87d03854a956a..d51da6d956642 100644 --- a/src/vehicle_display.cpp +++ b/src/vehicle_display.cpp @@ -443,11 +443,11 @@ void vehicle::print_fuel_indicator( const catacurses::window &win, const point & if( debug_mode ) { wprintz( win, tank_color, _( ", %d %s(%4.2f%%)/hour, %s until %s" ), rate, units, 100.0 * rate / cap, - to_string_clipped( 60_minutes * tank_use / abs( rate ) ), tank_goal ); + to_string_clipped( 60_minutes * tank_use / std::abs( rate ) ), tank_goal ); } else { wprintz( win, tank_color, _( ", %3.1f%% / hour, %s until %s" ), 100.0 * rate / cap, - to_string_clipped( 60_minutes * tank_use / abs( rate ) ), tank_goal ); + to_string_clipped( 60_minutes * tank_use / std::abs( rate ) ), tank_goal ); } } } diff --git a/src/vehicle_group.h b/src/vehicle_group.h index b48efff66c5de..210c667d6f77f 100644 --- a/src/vehicle_group.h +++ b/src/vehicle_group.h @@ -1,6 +1,6 @@ #pragma once -#ifndef VEHICLE_GROUP_H -#define VEHICLE_GROUP_H +#ifndef CATA_SRC_VEHICLE_GROUP_H +#define CATA_SRC_VEHICLE_GROUP_H #include #include @@ -189,4 +189,4 @@ class VehicleSpawn static FunctionMap builtin_functions; }; -#endif +#endif // CATA_SRC_VEHICLE_GROUP_H diff --git a/src/vehicle_move.cpp b/src/vehicle_move.cpp index 739dbe443ad7c..100a05dae0b32 100644 --- a/src/vehicle_move.cpp +++ b/src/vehicle_move.cpp @@ -81,7 +81,7 @@ int vmiph_to_cmps( int vmiph ) int vehicle::slowdown( int at_velocity ) const { - double mps = vmiph_to_mps( abs( at_velocity ) ); + double mps = vmiph_to_mps( std::abs( at_velocity ) ); // slowdown due to air resistance is proportional to square of speed double f_total_drag = coeff_air_drag() * mps * mps; @@ -168,7 +168,7 @@ void vehicle::thrust( int thd, int z ) int max_vel = traction * max_velocity(); // Get braking power - int brk = std::max( 1000, abs( max_vel ) * 3 / 10 ); + int brk = std::max( 1000, std::abs( max_vel ) * 3 / 10 ); //pos or neg if accelerator or brake int vel_inc = ( ( thrusting ) ? accel : brk ) * thd; @@ -231,9 +231,10 @@ void vehicle::thrust( int thd, int z ) const int velocity_kt = velocity * 0.01; int value; if( velocity_kt < 70 ) { - value = 49 * pow( velocity_kt, 3 ) - 4118 * pow( velocity_kt, 2 ) - 76512 * velocity_kt + 18458000; + value = 49 * std::pow( velocity_kt, 3 ) - + 4118 * std::pow( velocity_kt, 2 ) - 76512 * velocity_kt + 18458000; } else { - value = 1864 * pow( velocity_kt, 2 ) - 272190 * velocity_kt + 19473000; + value = 1864 * std::pow( velocity_kt, 2 ) - 272190 * velocity_kt + 19473000; } value *= 0.0001; load = std::max( 200, std::min( 1000, ( ( value / 2 ) + 100 ) ) ); @@ -316,7 +317,7 @@ void vehicle::cruise_thrust( int amount ) // Integer round to lowest multiple of amount. // The result is always equal to the original or closer to zero, // even if negative - cruise_velocity = ( cruise_velocity / abs( amount ) ) * abs( amount ); + cruise_velocity = ( cruise_velocity / std::abs( amount ) ) * std::abs( amount ); } // Can't have a cruise speed faster than max speed // or reverse speed faster than max reverse speed. @@ -644,8 +645,8 @@ veh_collision vehicle::part_collision( int part, const tripoint &p, // factor = -25 if mass is much greater than mass2 // factor = +25 if mass2 is much greater than mass const float weight_factor = mass >= mass2 ? - -25 * ( log( mass ) - log( mass2 ) ) / log( mass ) : - 25 * ( log( mass2 ) - log( mass ) ) / log( mass2 ); + -25 * ( std::log( mass ) - std::log( mass2 ) ) / std::log( mass ) : + 25 * ( std::log( mass2 ) - std::log( mass ) ) / std::log( mass2 ); float k = 50 + material_factor + weight_factor; k = std::max( 10.0f, std::min( 90.0f, k ) ); @@ -838,7 +839,7 @@ veh_collision vehicle::part_collision( int part, const tripoint &p, } if( smashed && !vert_coll ) { - int turn_amount = rng( 1, 3 ) * sqrt( static_cast( part_dmg ) ); + int turn_amount = rng( 1, 3 ) * std::sqrt( static_cast( part_dmg ) ); turn_amount /= 15; if( turn_amount < 1 ) { turn_amount = 1; @@ -979,7 +980,7 @@ void vehicle::autodrive( int x, int y ) turn( turn_delta ); } if( y != 0 ) { - int thr_amount = 100 * ( abs( velocity ) < 2000 ? 4 : 5 ); + int thr_amount = 100 * ( std::abs( velocity ) < 2000 ? 4 : 5 ); if( cruise_on ) { cruise_thrust( -y * thr_amount ); } else { @@ -1136,7 +1137,7 @@ void vehicle::pldrive( const point &p, int z ) } if( p.y != 0 ) { - int thr_amount = 100 * ( abs( velocity ) < 2000 ? 4 : 5 ); + int thr_amount = 100 * ( std::abs( velocity ) < 2000 ? 4 : 5 ); if( cruise_on ) { cruise_thrust( -p.y * thr_amount ); } else { @@ -1254,7 +1255,7 @@ void vehicle::precalculate_vehicle_turning( int new_turn_dir, bool check_rail_di tripoint dp; bool is_diagonal_movement = new_turn_dir % 90 == 45; - if( abs( velocity ) >= 20 ) { + if( std::abs( velocity ) >= 20 ) { mdir.advance( velocity < 0 ? -1 : 1 ); dp.x = mdir.dx(); dp.y = mdir.dy(); @@ -1416,7 +1417,7 @@ bool vehicle::is_wheel_state_correct_to_turn_on_rails( int wheels_on_rail, int w && ( wheels_on_rail != turning_wheels_that_are_one_axis // wheels that want to turn is not on same axis || all_wheels_on_one_axis || - ( abs( rail_wheel_bounding_box.p2.x - rail_wheel_bounding_box.p1.x ) < 4 && velocity < 0 ) ); + ( std::abs( rail_wheel_bounding_box.p2.x - rail_wheel_bounding_box.p1.x ) < 4 && velocity < 0 ) ); // allow turn for vehicles with wheel distance < 4 when moving backwards } @@ -1475,7 +1476,7 @@ vehicle *vehicle::act_on_map() // Low enough for bicycles to go in reverse. // If the movement is due to a change in z-level, i.e a helicopter then the lateral movement will often be zero. - if( !should_fall && abs( velocity ) < 20 && requested_z_change == 0 ) { + if( !should_fall && std::abs( velocity ) < 20 && requested_z_change == 0 ) { stop(); of_turn -= .321f; return this; @@ -1495,7 +1496,7 @@ vehicle *vehicle::act_on_map() return this; } } - const float turn_cost = vehicles::vmiph_per_tile / std::max( 0.0001f, abs( velocity ) ); + const float turn_cost = vehicles::vmiph_per_tile / std::max( 0.0001f, std::abs( velocity ) ); // Can't afford it this turn? // Low speed shouldn't prevent vehicle from falling, though @@ -1573,7 +1574,7 @@ vehicle *vehicle::act_on_map() } tripoint dp; - if( abs( velocity ) >= 20 && !falling_only ) { + if( std::abs( velocity ) >= 20 && !falling_only ) { mdir.advance( velocity < 0 ? -1 : 1 ); dp.x = mdir.dx(); dp.y = mdir.dy(); @@ -1692,7 +1693,7 @@ float map::vehicle_wheel_traction( const vehicle &veh, int map::shake_vehicle( vehicle &veh, const int velocity_before, const int direction ) { - const int d_vel = abs( veh.velocity - velocity_before ) / 100; + const int d_vel = std::abs( veh.velocity - velocity_before ) / 100; std::vector riders = veh.get_riders(); @@ -1757,7 +1758,7 @@ int map::shake_vehicle( vehicle &veh, const int velocity_before, const int direc psg->add_msg_player_or_npc( m_warning, _( "You lose control of the %s." ), _( " loses control of the %s." ), veh.name ); - int turn_amount = rng( 1, 3 ) * sqrt( abs( veh.velocity ) ) / 30; + int turn_amount = rng( 1, 3 ) * std::sqrt( std::abs( veh.velocity ) ) / 30; if( turn_amount < 1 ) { turn_amount = 1; } diff --git a/src/vehicle_selector.h b/src/vehicle_selector.h index 620cedfbe7a2a..da6b81dabbf6b 100644 --- a/src/vehicle_selector.h +++ b/src/vehicle_selector.h @@ -1,6 +1,6 @@ #pragma once -#ifndef VEHICLE_SELECTOR_H -#define VEHICLE_SELECTOR_H +#ifndef CATA_SRC_VEHICLE_SELECTOR_H +#define CATA_SRC_VEHICLE_SELECTOR_H #include #include @@ -92,4 +92,4 @@ class vehicle_selector : public visitable std::vector data; }; -#endif +#endif // CATA_SRC_VEHICLE_SELECTOR_H diff --git a/src/vehicle_use.cpp b/src/vehicle_use.cpp index b5bcda1036725..96ba9e7591c1f 100644 --- a/src/vehicle_use.cpp +++ b/src/vehicle_use.cpp @@ -925,7 +925,7 @@ bool vehicle::start_engine( const int e ) } const double dmg = parts[engines[e]].damage_percent(); - const int engine_power = abs( part_epower_w( engines[e] ) ); + const int engine_power = std::abs( part_epower_w( engines[e] ) ); const double cold_factor = engine_cold_factor( e ); const int start_moves = engine_start_time( e ); @@ -1259,7 +1259,7 @@ void vehicle::transform_terrain() g->m.add_field( start_pos, new_field, ttd.post_field_intensity, ttd.post_field_age ); } } else { - const int speed = abs( velocity ); + const int speed = std::abs( velocity ); int v_damage = rng( 3, speed ); damage( vp.part_index(), v_damage, DT_BASH, false ); sounds::sound( start_pos, v_damage, sounds::sound_t::combat, _( "Clanggggg!" ), false, diff --git a/src/visitable.h b/src/visitable.h index ddfc4a4d4d126..40210068901ad 100644 --- a/src/visitable.h +++ b/src/visitable.h @@ -1,6 +1,6 @@ #pragma once -#ifndef VISITABLE_H -#define VISITABLE_H +#ifndef CATA_SRC_VISITABLE_H +#define CATA_SRC_VISITABLE_H #include #include @@ -114,4 +114,4 @@ class visitable item remove_item( item &it ); }; -#endif +#endif // CATA_SRC_VISITABLE_H diff --git a/src/vitamin.h b/src/vitamin.h index f085297ece746..03cc84a2a0642 100644 --- a/src/vitamin.h +++ b/src/vitamin.h @@ -1,6 +1,6 @@ #pragma once -#ifndef VITAMIN_H -#define VITAMIN_H +#ifndef CATA_SRC_VITAMIN_H +#define CATA_SRC_VITAMIN_H #include #include @@ -110,4 +110,4 @@ class vitamin std::set flags_; }; -#endif +#endif // CATA_SRC_VITAMIN_H diff --git a/src/vpart_position.h b/src/vpart_position.h index b2de2dc818be5..459def01884be 100644 --- a/src/vpart_position.h +++ b/src/vpart_position.h @@ -1,6 +1,6 @@ #pragma once -#ifndef VPART_POSITION_H -#define VPART_POSITION_H +#ifndef CATA_SRC_VPART_POSITION_H +#define CATA_SRC_VPART_POSITION_H #include #include @@ -155,4 +155,4 @@ inline vehicle *veh_pointer_or_null( const optional_vpart_position &p ) return p ? &p->vehicle() : nullptr; } -#endif +#endif // CATA_SRC_VPART_POSITION_H diff --git a/src/vpart_range.h b/src/vpart_range.h index 90b517fa690ad..880c4e978c41f 100644 --- a/src/vpart_range.h +++ b/src/vpart_range.h @@ -1,6 +1,6 @@ #pragma once -#ifndef VPART_RANGE_H -#define VPART_RANGE_H +#ifndef CATA_SRC_VPART_RANGE_H +#define CATA_SRC_VPART_RANGE_H #include #include @@ -166,4 +166,4 @@ class vehicle_part_with_feature_range : public bool matches( size_t part ) const; }; -#endif +#endif // CATA_SRC_VPART_RANGE_H diff --git a/src/wcwidth.h b/src/wcwidth.h index a4eeeb1f9ebe2..ab8f651e027ab 100644 --- a/src/wcwidth.h +++ b/src/wcwidth.h @@ -1,6 +1,6 @@ #pragma once -#ifndef WCWIDTH_H -#define WCWIDTH_H +#ifndef CATA_SRC_WCWIDTH_H +#define CATA_SRC_WCWIDTH_H #include @@ -8,4 +8,4 @@ */ int mk_wcwidth( uint32_t ucs ); -#endif +#endif // CATA_SRC_WCWIDTH_H diff --git a/src/weather.cpp b/src/weather.cpp index 59b92cb5043e0..289a0fc493838 100644 --- a/src/weather.cpp +++ b/src/weather.cpp @@ -704,8 +704,8 @@ int get_local_windchill( double temperature_f, double humidity, double wind_mph // Temperature is removed at the end, because get_local_windchill is meant to calculate the difference. // Source : http://en.wikipedia.org/wiki/Wind_chill#North_American_and_United_Kingdom_wind_chill_index - windchill_f = 35.74 + 0.6215 * temperature_f - 35.75 * pow( wind_mph, - 0.16 ) + 0.4275 * temperature_f * pow( wind_mph, 0.16 ) - temperature_f; + windchill_f = 35.74 + 0.6215 * temperature_f - 35.75 * std::pow( wind_mph, + 0.16 ) + 0.4275 * temperature_f * std::pow( wind_mph, 0.16 ) - temperature_f; if( wind_mph < 3 ) { // This model fails when wind is less than 3 mph windchill_f = 0; @@ -724,7 +724,7 @@ int get_local_windchill( double temperature_f, double humidity, double wind_mph // model being designed for reasonable ambient temperature values, // rather than extremely high ones. double windchill_c = 0.33 * std::min( 150.00, humidity / 100.00 * 6.105 * - exp( 17.27 * temperature_c / ( 237.70 + temperature_c ) ) ) - 0.70 * + std::exp( 17.27 * temperature_c / ( 237.70 + temperature_c ) ) ) - 0.70 * wind_meters_per_sec - 4.00; // Convert to Fahrenheit, but omit the '+ 32' because we are only dealing with a piece of the felt air temperature equation. windchill_f = windchill_c * 9 / 5; diff --git a/src/weather.h b/src/weather.h index 7c3d673d0e560..5bb269e145e0d 100644 --- a/src/weather.h +++ b/src/weather.h @@ -1,6 +1,6 @@ #pragma once -#ifndef WEATHER_H -#define WEATHER_H +#ifndef CATA_SRC_WEATHER_H +#define CATA_SRC_WEATHER_H #include "color.h" #include "optional.h" @@ -264,4 +264,4 @@ class weather_manager void clear_temp_cache(); }; -#endif +#endif // CATA_SRC_WEATHER_H diff --git a/src/weather_gen.cpp b/src/weather_gen.cpp index 72d8624e164e0..b68d04f856881 100644 --- a/src/weather_gen.cpp +++ b/src/weather_gen.cpp @@ -146,7 +146,7 @@ w_point weather_generator::get_weather( const tripoint &location, const time_poi 10 * ( -seasonality + 2 ); // Wind power - W = std::max( 0, static_cast( base_wind * rng( 1, 2 ) / pow( ( P + W ) / 1014.78, rng( 9, + W = std::max( 0, static_cast( base_wind * rng( 1, 2 ) / std::pow( ( P + W ) / 1014.78, rng( 9, base_wind_distrib_peaks ) ) + -cyf / base_wind_season_variation * rng( 1, 2 ) ) ); // Initial static variable diff --git a/src/weather_gen.h b/src/weather_gen.h index ab98d6eb199ff..9b269ec82cced 100644 --- a/src/weather_gen.h +++ b/src/weather_gen.h @@ -1,6 +1,6 @@ #pragma once -#ifndef WEATHER_GEN_H -#define WEATHER_GEN_H +#ifndef CATA_SRC_WEATHER_GEN_H +#define CATA_SRC_WEATHER_GEN_H #include @@ -67,4 +67,4 @@ class weather_generator static weather_generator load( const JsonObject &jo ); }; -#endif +#endif // CATA_SRC_WEATHER_GEN_H diff --git a/src/weighted_list.h b/src/weighted_list.h index 283f4b7a46f93..065986e498b8e 100644 --- a/src/weighted_list.h +++ b/src/weighted_list.h @@ -1,6 +1,6 @@ #pragma once -#ifndef WEIGHTED_LIST_H -#define WEIGHTED_LIST_H +#ifndef CATA_SRC_WEIGHTED_LIST_H +#define CATA_SRC_WEIGHTED_LIST_H #include "rng.h" @@ -245,4 +245,4 @@ template struct weighted_float_list : public weighted_list #include @@ -165,4 +165,4 @@ void load_external_option( const JsonObject &jo ); extern std::unique_ptr world_generator; -#endif +#endif // CATA_SRC_WORLDFACTORY_H diff --git a/tests/assertion_helpers.h b/tests/assertion_helpers.h index d4ceab956d835..b35d54f1bf433 100644 --- a/tests/assertion_helpers.h +++ b/tests/assertion_helpers.h @@ -1,6 +1,6 @@ #pragma once -#ifndef ASSERTION_HELPERS_H -#define ASSERTION_HELPERS_H +#ifndef CATA_TESTS_ASSERTION_HELPERS_H +#define CATA_TESTS_ASSERTION_HELPERS_H #include "catch/catch.hpp" @@ -15,4 +15,4 @@ void check_containers_equal( const Container1 &c1, const Container2 &c2 ) CHECK( std::equal( c1.begin(), c1.end(), c2.begin() ) ); } -#endif // ASSERTION_HELPERS_H +#endif // CATA_TESTS_ASSERTION_HELPERS_H diff --git a/tests/catch/catch.hpp b/tests/catch/catch.hpp index 3836b220c2544..94b5497e0c03c 100644 --- a/tests/catch/catch.hpp +++ b/tests/catch/catch.hpp @@ -8,6 +8,7 @@ * Distributed under the Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) */ +// NOLINTNEXTLINE(cata-header-guard) #ifndef TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED #define TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED // start catch.hpp diff --git a/tests/char_biometrics_test.cpp b/tests/char_biometrics_test.cpp index 88ecaac46ce54..bb133ff2e37d0 100644 --- a/tests/char_biometrics_test.cpp +++ b/tests/char_biometrics_test.cpp @@ -57,7 +57,7 @@ static float bodyweight_kg_at_bmi( player &dummy, float bmi ) // Clear player traits and give them a single trait by name static void set_single_trait( player &dummy, std::string trait_name ) { - dummy.empty_traits(); + dummy.clear_mutations(); dummy.toggle_trait( trait_id( trait_name ) ); REQUIRE( dummy.has_trait( trait_id( trait_name ) ) ); } @@ -363,7 +363,7 @@ TEST_CASE( "mutations may affect character metabolic rate", "[biometrics][metabo // Metabolic base rate uses PLAYER_HUNGER_RATE from game_balance.json, described as "base hunger // rate per 5 minutes". With no metabolism-affecting mutations, metabolism should be this value. const float normal_metabolic_rate = get_option( "PLAYER_HUNGER_RATE" ); - dummy.empty_traits(); + dummy.clear_mutations(); CHECK( dummy.metabolic_rate_base() == normal_metabolic_rate ); // The remaining checks assume the configured base rate is 1.0; if this is ever changed in the diff --git a/tests/char_healing_test.cpp b/tests/char_healing_test.cpp index e05a1d1691eea..7eebfdbf4a2e5 100644 --- a/tests/char_healing_test.cpp +++ b/tests/char_healing_test.cpp @@ -10,7 +10,7 @@ static void give_one_trait( player &dummy, const std::string trait_name ) { const trait_id trait( trait_name ); - dummy.empty_traits(); + dummy.clear_mutations(); dummy.toggle_trait( trait ); REQUIRE( dummy.has_trait( trait ) ); } @@ -29,7 +29,7 @@ TEST_CASE( "traits and mutations affecting healing rate", "[heal][trait][mutatio REQUIRE( dummy.get_healthy() == 0 ); GIVEN( "no traits" ) { - dummy.empty_traits(); + dummy.clear_mutations(); THEN( "there are no healing modifiers from mutations" ) { CHECK( dummy.mutation_value( "healing_resting" ) == 0.0f ); diff --git a/tests/colony_list_test_helpers.h b/tests/colony_list_test_helpers.h index 47644b9a63049..57bed9ca10840 100644 --- a/tests/colony_list_test_helpers.h +++ b/tests/colony_list_test_helpers.h @@ -1,6 +1,6 @@ #pragma once -#ifndef COLONY_LIST_TEST_HELPERS_H -#define COLONY_LIST_TEST_HELPERS_H +#ifndef CATA_TESTS_COLONY_LIST_TEST_HELPERS_H +#define CATA_TESTS_COLONY_LIST_TEST_HELPERS_H // Fast xorshift+128 random number generator function // original: https://codingforspeed.com/using-faster-psudo-random-generator-xorshift/ @@ -44,4 +44,4 @@ struct perfect_forwarding_test { {} }; -#endif // COLONY_LIST_TEST_HELPERS_H +#endif // CATA_TESTS_COLONY_LIST_TEST_HELPERS_H diff --git a/tests/crafting_test.cpp b/tests/crafting_test.cpp index 371867ffca877..1e6250b5cfc15 100644 --- a/tests/crafting_test.cpp +++ b/tests/crafting_test.cpp @@ -378,7 +378,8 @@ TEST_CASE( "tools use charge to craft", "[crafting][charge]" ) tools.emplace_back( "soldering_iron", -1, 20 ); THEN( "crafting succeeds, and uses charges from each tool" ) { - actually_test_craft( recipe_id( "carver_off" ), tools, INT_MAX ); + int turns = actually_test_craft( recipe_id( "carver_off" ), tools, INT_MAX ); + CAPTURE( turns ); CHECK( get_remaining_charges( "hotplate" ) == 10 ); CHECK( get_remaining_charges( "soldering_iron" ) == 10 ); } diff --git a/tests/encumbrance_test.cpp b/tests/encumbrance_test.cpp index ae5bb48cb717b..d5d36d63b31aa 100644 --- a/tests/encumbrance_test.cpp +++ b/tests/encumbrance_test.cpp @@ -26,7 +26,7 @@ static void test_encumbrance_on( ) { CAPTURE( body_part ); - p.empty_traits(); + p.clear_mutations(); p.worn.clear(); if( tweak_player ) { tweak_player( p ); diff --git a/tests/food_fun_for_test.cpp b/tests/food_fun_for_test.cpp index bfd9563947c15..cd953586a4150 100644 --- a/tests/food_fun_for_test.cpp +++ b/tests/food_fun_for_test.cpp @@ -421,7 +421,7 @@ TEST_CASE( "fun for bionic bio taste blocker", "[fun_for][food][bionic]" ) // Needs 1 kJ per negative fun unit to nullify bad taste dummy.set_power_level( 10_kJ ); REQUIRE( garlic_fun < -10 ); - REQUIRE_FALSE( dummy.get_power_level() > units::from_kilojoule( abs( garlic_fun ) ) ); + REQUIRE_FALSE( dummy.get_power_level() > units::from_kilojoule( std::abs( garlic_fun ) ) ); THEN( "the bad taste remains" ) { actual_fun = dummy.fun_for( garlic ); @@ -432,7 +432,7 @@ TEST_CASE( "fun for bionic bio taste blocker", "[fun_for][food][bionic]" ) WHEN( "it has enough power" ) { REQUIRE( garlic_fun >= -20 ); dummy.set_power_level( 20_kJ ); - REQUIRE( dummy.get_power_level() > units::from_kilojoule( abs( garlic_fun ) ) ); + REQUIRE( dummy.get_power_level() > units::from_kilojoule( std::abs( garlic_fun ) ) ); THEN( "the bad taste is nullified" ) { actual_fun = dummy.fun_for( garlic ); diff --git a/tests/item_group_test.cpp b/tests/item_group_test.cpp new file mode 100644 index 0000000000000..e35557d45071d --- /dev/null +++ b/tests/item_group_test.cpp @@ -0,0 +1,63 @@ +#include "catch/catch.hpp" +#include "item.h" +#include "item_group.h" + +TEST_CASE( "spawn with default charges and with ammo", "[item_group]" ) +{ + Item_modifier default_charges; + default_charges.with_ammo = 100; + SECTION( "tools without ammo" ) { + item matches( "matches" ); + REQUIRE( matches.ammo_default() == "NULL" ); + default_charges.modify( matches ); + CHECK( matches.ammo_remaining() == matches.ammo_capacity() ); + } + + SECTION( "gun with ammo type" ) { + item glock( "glock_19" ); + REQUIRE( glock.ammo_default() != "NULL" ); + default_charges.modify( glock ); + CHECK( glock.ammo_remaining() == glock.ammo_capacity() ); + } +} + +TEST_CASE( "Item_modifier damages item", "[item_group]" ) +{ + Item_modifier damaged; + damaged.damage.first = 1; + damaged.damage.second = 1; + SECTION( "except when it's an ammunition" ) { + item rock( "rock" ); + REQUIRE( rock.damage() == 0 ); + REQUIRE( rock.max_damage() == 0 ); + damaged.modify( rock ); + CHECK( rock.damage() == 0 ); + } + SECTION( "when it can be damaged" ) { + item glock( "glock_19" ); + REQUIRE( glock.damage() == 0 ); + REQUIRE( glock.max_damage() > 0 ); + damaged.modify( glock ); + CHECK( glock.damage() == 1 ); + } +} + +TEST_CASE( "Item_modifier gun fouling", "[item_group]" ) +{ + Item_modifier fouled; + fouled.dirt.first = 1; + SECTION( "guns can be fouled" ) { + item glock( "glock_19" ); + REQUIRE( !glock.has_flag( "PRIMITIVE_RANGED_WEAPON" ) ); + REQUIRE( !glock.has_var( "dirt" ) ); + fouled.modify( glock ); + CHECK( glock.get_var( "dirt", 0.0 ) > 0.0 ); + } + SECTION( "bows can't be fouled" ) { + item bow( "longbow" ); + REQUIRE( !bow.has_var( "dirt" ) ); + REQUIRE( bow.has_flag( "PRIMITIVE_RANGED_WEAPON" ) ); + fouled.modify( bow ); + CHECK( !bow.has_var( "dirt" ) ); + } +} diff --git a/tests/item_tname_test.cpp b/tests/item_tname_test.cpp index 85cea25e11dce..9319e507b9f89 100644 --- a/tests/item_tname_test.cpp +++ b/tests/item_tname_test.cpp @@ -47,7 +47,7 @@ static const skill_id skill_survival( "survival" ); TEST_CASE( "food with hidden effects", "[item][tname][hidden]" ) { - g->u.empty_traits(); + g->u.clear_mutations(); GIVEN( "food with hidden poison" ) { item coffee = item( "coffee_pod" ); @@ -386,7 +386,7 @@ TEST_CASE( "weapon fouling", "[item][tname][fouling][dirt]" ) item gun( "hk_mp5" ); // Ensure the player and gun are normal size to prevent "too big" or "too small" suffix in tname - g->u.empty_traits(); + g->u.clear_mutations(); REQUIRE( gun.get_sizing( g-> u, true ) == item::sizing::human_sized_human_char ); REQUIRE_FALSE( gun.has_flag( "OVERSIZE" ) ); REQUIRE_FALSE( gun.has_flag( "UNDERSIZE" ) ); diff --git a/tests/iteminfo_test.cpp b/tests/iteminfo_test.cpp index fdfd68c28e859..09fd28c8a9612 100644 --- a/tests/iteminfo_test.cpp +++ b/tests/iteminfo_test.cpp @@ -17,7 +17,7 @@ static void test_info_equals( const item &i, const iteminfo_query &q, const std::string &reference ) { - g->u.empty_traits(); + g->u.clear_mutations(); std::vector info_v; std::string info = i.info( info_v, &q, 1 ); CHECK( info == reference ); @@ -26,7 +26,7 @@ static void test_info_equals( const item &i, const iteminfo_query &q, static void test_info_contains( const item &i, const iteminfo_query &q, const std::string &reference ) { - g->u.empty_traits(); + g->u.clear_mutations(); std::vector info_v; std::string info = i.info( info_v, &q, 1 ); using Catch::Matchers::Contains; @@ -515,7 +515,7 @@ TEST_CASE( "show available recipes with item as an ingredient", "[item][iteminfo { iteminfo_query q = q_vec( { iteminfo_parts::DESCRIPTION_APPLICABLE_RECIPES } ); const recipe *purtab = &recipe_id( "pur_tablets" ).obj(); - g->u.empty_traits(); + g->u.clear_mutations(); GIVEN( "character has a potassium iodide tablet and no skill" ) { item &iodine = g->u.i_add( item( "iodine" ) ); diff --git a/tests/itemname_test.cpp b/tests/itemname_test.cpp index 53189e2ee3ef6..f588e7740c049 100644 --- a/tests/itemname_test.cpp +++ b/tests/itemname_test.cpp @@ -11,7 +11,7 @@ TEST_CASE( "item sizing display", "[item][iteminfo][display_name][sizing]" ) { GIVEN( "player is a normal size" ) { - g->u.empty_traits(); + g->u.clear_mutations(); WHEN( "the item is a normal size" ) { std::string name = item( "bookplate" ).display_name(); @@ -46,7 +46,7 @@ TEST_CASE( "item sizing display", "[item][iteminfo][display_name][sizing]" ) } GIVEN( "player is a huge size" ) { - g->u.empty_traits(); + g->u.clear_mutations(); g->u.toggle_trait( trait_id( "HUGE_OK" ) ); WHEN( "the item is a normal size" ) { @@ -82,7 +82,7 @@ TEST_CASE( "item sizing display", "[item][iteminfo][display_name][sizing]" ) } GIVEN( "player is a small size" ) { - g->u.empty_traits(); + g->u.clear_mutations(); g->u.toggle_trait( trait_id( "SMALL_OK" ) ); WHEN( "the item is a normal size" ) { diff --git a/tests/iuse_test.cpp b/tests/iuse_test.cpp index b76f39ecb6cd6..b0cc1d8b57640 100644 --- a/tests/iuse_test.cpp +++ b/tests/iuse_test.cpp @@ -416,7 +416,7 @@ TEST_CASE( "towel", "[iuse][towel]" ) GIVEN( "avatar is boomered and wet" ) { dummy.add_effect( efftype_id( "boomered" ), 1_hours ); dummy.add_morale( MORALE_WET, -10, -10, 1_hours, 1_hours ); - REQUIRE( abs( dummy.has_morale( MORALE_WET ) ) ); + REQUIRE( std::abs( dummy.has_morale( MORALE_WET ) ) ); WHEN( "they use a dry towel" ) { REQUIRE_FALSE( towel.has_flag( flag_WET ) ); @@ -424,7 +424,7 @@ TEST_CASE( "towel", "[iuse][towel]" ) THEN( "it removes the boomered effect, but not the wetness" ) { CHECK_FALSE( dummy.has_effect( efftype_id( "boomered" ) ) ); - CHECK( abs( dummy.has_morale( MORALE_WET ) ) ); + CHECK( std::abs( dummy.has_morale( MORALE_WET ) ) ); AND_THEN( "the towel becomes soiled" ) { CHECK( towel.typeId() == "towel_soiled" ); diff --git a/tests/line_test.cpp b/tests/line_test.cpp index 2ca9d843e8dd9..ba3a3b972a240 100644 --- a/tests/line_test.cpp +++ b/tests/line_test.cpp @@ -19,8 +19,8 @@ static std::vector canonical_line_to( std::vector ret; const int dx = x2 - x1; const int dy = y2 - y1; - const int ax = abs( dx ) << 1; - const int ay = abs( dy ) << 1; + const int ax = std::abs( dx ) << 1; + const int ay = std::abs( dy ) << 1; int sx = SGN( dx ); int sy = SGN( dy ); if( dy == 0 ) { @@ -38,10 +38,10 @@ static std::vector canonical_line_to( int xmax = ( x1 > x2 ? x1 : x2 ); int ymax = ( y1 > y2 ? y1 : y2 ); - xmin -= abs( dx ); - ymin -= abs( dy ); - xmax += abs( dx ); - ymax += abs( dy ); + xmin -= std::abs( dx ); + ymin -= std::abs( dy ); + xmax += std::abs( dx ); + ymax += std::abs( dy ); if( ax == ay ) { do { @@ -394,8 +394,8 @@ TEST_CASE( "line_to_boundaries" ) { for( int i = -60; i < 60; ++i ) { for( int j = -60; j < 60; ++j ) { - const int ax = abs( i ) * 2; - const int ay = abs( j ) * 2; + const int ax = std::abs( i ) * 2; + const int ay = std::abs( j ) * 2; const int dominant = std::max( ax, ay ); const int minor = std::min( ax, ay ); const int ideal_start_offset = minor - ( dominant / 2 ); diff --git a/tests/map_extra_test.cpp b/tests/map_extra_test.cpp index 1371447c3a574..9f0c6be715db3 100644 --- a/tests/map_extra_test.cpp +++ b/tests/map_extra_test.cpp @@ -5,31 +5,23 @@ #include "overmapbuffer.h" #include "map_extras.h" -// This test case is disabled because this map extra effectively doesn't spawn -// with the current real settings. In order for it to spawn, you have to: -// -// 1) roll of a map extra on a road -// 2) select the mx_minefield extra out of the pool for road map extras -// 3) have your current location be a road that is adjacent to a bridge -// -// and that particular combo is so rare that it might as well never happen. -TEST_CASE( "mx_minefield real spawn", "[map_extra][overmap][!mayfail]" ) +TEST_CASE( "mx_minefield real spawn", "[map_extra][overmap]" ) { // Pick a point in the middle of the overmap so we don't generate quite so // many overmaps when searching. const tripoint origin = tripoint( 90, 90, 0 );; - // Find all of the roads within a 180 OMT radius of this location. + // Find all of the bridges within a 180 OMT radius of this location. omt_find_params find_params; - find_params.types = {{"road", ot_match_type::type}}; + find_params.types = {{"bridge", ot_match_type::type}}; find_params.search_range = 180; - const std::vector roads = overmap_buffer.find_all( origin, find_params ); + const std::vector bridges = overmap_buffer.find_all( origin, find_params ); - // The rest of this check is pointless if there are no roads. - REQUIRE( roads.size() > 0 ); + // The rest of this check is pointless if there are no bridges. + REQUIRE( !bridges.empty() ); - // For every single road we found, run mapgen (which will select and apply a map extra). - for( const tripoint &p : roads ) { + // For every single bridge we found, run mapgen (which will select and apply a map extra). + for( const tripoint &p : bridges ) { tinymap tm; tm.load( omt_to_sm_copy( p ), false ); } @@ -49,7 +41,7 @@ TEST_CASE( "mx_minefield real spawn", "[map_extra][overmap][!mayfail]" ) CHECK( successes > 0 ); } -TEST_CASE( "mx_minefield theorertical spawn", "[map_extra][overmap]" ) +TEST_CASE( "mx_minefield theoretical spawn", "[map_extra][overmap]" ) { overmap &om = overmap_buffer.get( point_zero ); @@ -57,12 +49,12 @@ TEST_CASE( "mx_minefield theorertical spawn", "[map_extra][overmap]" ) const oter_id bridge( "bridge_north" ); // The mx_minefield map extra expects to have a particular configuration with - // three OMTs--a road, then not a bridge (aka a road is fine), then a bridge. - // It does this for four rotations, with the bridge on the north, south, east, + // three OMTs--a road, then a bridge, then a bridge once again. + // It does this for four rotations, with the road on the north, south, east, // and west of the target point. const auto setup_terrain_and_generate = [&]( const tripoint & center, om_direction::type bridge_direction ) { - om.ter_set( center, road ); + om.ter_set( center, bridge ); om.ter_set( center + om_direction::displace( bridge_direction, 1 ), bridge ); om.ter_set( center + om_direction::displace( om_direction::opposite( bridge_direction ), 1 ), road ); diff --git a/tests/map_helpers.cpp b/tests/map_helpers.cpp index d0b62c90af0ef..70c5741ab0952 100644 --- a/tests/map_helpers.cpp +++ b/tests/map_helpers.cpp @@ -19,6 +19,14 @@ class vehicle; +// Remove all vehicles from the map +void clear_vehicles() +{ + for( wrapped_vehicle &veh : g->m.get_vehicles() ) { + g->m.destroy_vehicle( veh.v ); + } +} + void wipe_map_terrain() { const int mapsize = g->m.getmapsize() * SEEX; @@ -30,9 +38,7 @@ void wipe_map_terrain() } } } - for( wrapped_vehicle &veh : g->m.get_vehicles() ) { - g->m.destroy_vehicle( veh.v ); - } + clear_vehicles(); g->m.invalidate_map_cache( 0 ); g->m.build_map_cache( 0, true ); } @@ -70,6 +76,16 @@ void clear_fields( const int zlevel ) } } +void clear_items( const int zlevel ) +{ + const int mapsize = g->m.getmapsize() * SEEX; + for( int x = 0; x < mapsize; ++x ) { + for( int y = 0; y < mapsize; ++y ) { + g->m.i_clear( { x, y, zlevel } ); + } + } +} + void clear_map() { // Clearing all z-levels is rather slow, so just clear the ones I know the @@ -81,6 +97,9 @@ void clear_map() clear_npcs(); clear_creatures(); g->m.clear_traps(); + for( int z = -2; z <= 0; ++z ) { + clear_items( z ); + } } void clear_map_and_put_player_underground() @@ -97,17 +116,6 @@ monster &spawn_test_monster( const std::string &monster_type, const tripoint &st return *added; } -// Remove all vehicles from the map -void clear_vehicles() -{ - VehicleList vehs = g->m.get_vehicles(); - vehicle *veh_ptr; - for( auto &vehs_v : vehs ) { - veh_ptr = vehs_v.v; - g->m.destroy_vehicle( veh_ptr ); - } -} - // Build a map of size MAPSIZE_X x MAPSIZE_Y around tripoint_zero with a given // terrain, and no furniture, traps, or items. void build_test_map( const ter_id &terrain ) diff --git a/tests/map_helpers.h b/tests/map_helpers.h index e0b37ac3a016d..207632a8a200e 100644 --- a/tests/map_helpers.h +++ b/tests/map_helpers.h @@ -1,6 +1,6 @@ #pragma once -#ifndef MAP_HELPERS_H -#define MAP_HELPERS_H +#ifndef CATA_TESTS_MAP_HELPERS_H +#define CATA_TESTS_MAP_HELPERS_H #include @@ -13,10 +13,11 @@ void wipe_map_terrain(); void clear_creatures(); void clear_npcs(); void clear_fields( int zlevel ); +void clear_items( int zlevel ); void clear_map(); void clear_map_and_put_player_underground(); monster &spawn_test_monster( const std::string &monster_type, const tripoint &start ); void clear_vehicles(); void build_test_map( const ter_id &terrain ); -#endif +#endif // CATA_TESTS_MAP_HELPERS_H diff --git a/tests/new_character_test.cpp b/tests/new_character_test.cpp index f574e327c20a8..18cbe0790a2a3 100644 --- a/tests/new_character_test.cpp +++ b/tests/new_character_test.cpp @@ -51,7 +51,7 @@ static std::vector next_subset( const std::vector &set ) static bool try_set_traits( const std::vector &traits ) { - g->u.empty_traits(); + g->u.clear_mutations(); g->u.add_traits(); // mandatory prof/scen traits for( const trait_id &tr : traits ) { if( g->u.has_conflicting_trait( tr ) || !g->scen->traitquery( tr ) ) { diff --git a/tests/options_helpers.h b/tests/options_helpers.h index d5a345d4a48e8..1d947974b0a54 100644 --- a/tests/options_helpers.h +++ b/tests/options_helpers.h @@ -1,6 +1,6 @@ #pragma once -#ifndef CATA_TEST_OPTIONS_HELPERS_H -#define CATA_TEST_OPTIONS_HELPERS_H +#ifndef CATA_TESTS_OPTIONS_HELPERS_H +#define CATA_TESTS_OPTIONS_HELPERS_H #include @@ -18,4 +18,4 @@ class override_option std::string old_value_; }; -#endif +#endif // CATA_TESTS_OPTIONS_HELPERS_H diff --git a/tests/player_helpers.cpp b/tests/player_helpers.cpp index aa8acf83e3b8f..a6cf390170f3f 100644 --- a/tests/player_helpers.cpp +++ b/tests/player_helpers.cpp @@ -55,13 +55,20 @@ void clear_character( player &dummy, bool debug_storage ) while( dummy.takeoff( dummy.i_at( -2 ), &temp ) ); dummy.inv.clear(); dummy.remove_weapon(); - dummy.empty_traits(); + dummy.clear_mutations(); // Prevent spilling, but don't cause encumbrance if( debug_storage && !dummy.has_trait( trait_id( "DEBUG_STORAGE" ) ) ) { dummy.set_mutation( trait_id( "DEBUG_STORAGE" ) ); } + // Clear stomach and then eat a nutritious meal to normalize stomach + // contents (needs to happen before clear_morale). + dummy.stomach.empty(); + dummy.guts.empty(); + item food( "debug_nutrition" ); + dummy.eat( food ); + dummy.empty_skills(); dummy.clear_morale(); dummy.clear_bionics(); @@ -72,6 +79,7 @@ void clear_character( player &dummy, bool debug_storage ) // Restore all stamina and go to walk mode dummy.set_stamina( dummy.get_stamina_max() ); dummy.set_movement_mode( CMM_WALK ); + dummy.reset_activity_level(); // Make sure we don't carry around weird effects. dummy.clear_effects(); diff --git a/tests/player_helpers.h b/tests/player_helpers.h index 0d734802ac4f3..2abc8a1917f5e 100644 --- a/tests/player_helpers.h +++ b/tests/player_helpers.h @@ -1,6 +1,6 @@ #pragma once -#ifndef PLAYER_HELPERS_H -#define PLAYER_HELPERS_H +#ifndef CATA_TESTS_PLAYER_HELPERS_H +#define CATA_TESTS_PLAYER_HELPERS_H #include @@ -19,4 +19,4 @@ void process_activity( player &dummy ); npc &spawn_npc( const point &, const std::string &npc_class ); void give_and_activate_bionic( player &, bionic_id const & ); -#endif +#endif // CATA_TESTS_PLAYER_HELPERS_H diff --git a/tests/stats_tracker_test.cpp b/tests/stats_tracker_test.cpp index 1ef68dae64410..d2b17142dfafc 100644 --- a/tests/stats_tracker_test.cpp +++ b/tests/stats_tracker_test.cpp @@ -245,6 +245,9 @@ TEST_CASE( "achievments_tracker", "[stats]" ) b.send( avatar_zombie_kill ); REQUIRE( achievement_completed != nullptr ); CHECK( achievement_completed->id.str() == "achievement_kill_zombie" ); + CHECK( a.ui_text_for( achievement_completed ) == + "One down, billions to go…\n" + " 1/1 Number of zombies killed\n" ); } } diff --git a/tests/stomach_contents_test.cpp b/tests/stomach_contents_test.cpp index ff4545c377b64..3f11ff2f3ceca 100644 --- a/tests/stomach_contents_test.cpp +++ b/tests/stomach_contents_test.cpp @@ -94,6 +94,7 @@ TEST_CASE( "starve_test", "[starve][slow]" ) CAPTURE( dummy.metabolic_rate_base() ); CAPTURE( dummy.activity_level_str() ); CAPTURE( dummy.base_height() ); + CAPTURE( dummy.get_size() ); CAPTURE( dummy.height() ); CAPTURE( dummy.get_bmi() ); CAPTURE( dummy.bodyweight() ); diff --git a/tests/test_statistics.cpp b/tests/test_statistics.cpp index 81fe56e4f2e3f..19fca0e8fd0bb 100644 --- a/tests/test_statistics.cpp +++ b/tests/test_statistics.cpp @@ -11,7 +11,7 @@ BinomialMatcher::BinomialMatcher( const int num_samples, const double p, // Binomial expectation is np, variance is np(1-p). // So we want | obs - np | <= max_deviation * sqrt( np(1-p) ) expected_ = num_samples_ * p_; - margin_ = max_deviation_ * sqrt( num_samples_ * p_ * ( 1 - p_ ) ); + margin_ = max_deviation_ * std::sqrt( num_samples_ * p_ * ( 1 - p_ ) ); } bool BinomialMatcher::match( const int &obs ) const diff --git a/tests/test_statistics.h b/tests/test_statistics.h index 65772e5ab5b77..93d1763c6f1df 100644 --- a/tests/test_statistics.h +++ b/tests/test_statistics.h @@ -1,6 +1,6 @@ #pragma once -#ifndef TEST_STATISTICS_H -#define TEST_STATISTICS_H +#ifndef CATA_TESTS_TEST_STATISTICS_H +#define CATA_TESTS_TEST_STATISTICS_H #include #include @@ -227,4 +227,4 @@ inline BinomialMatcher IsBinomialObservation( return BinomialMatcher( num_samples, p, max_deviation ); } -#endif +#endif // CATA_TESTS_TEST_STATISTICS_H diff --git a/tools/clang-tidy-plugin/CMakeLists.txt b/tools/clang-tidy-plugin/CMakeLists.txt index a78f9f1d50f6e..f800fc588eb0f 100644 --- a/tools/clang-tidy-plugin/CMakeLists.txt +++ b/tools/clang-tidy-plugin/CMakeLists.txt @@ -6,6 +6,7 @@ find_package(Clang REQUIRED CONFIG) add_library( CataAnalyzerPlugin MODULE CataTidyModule.cpp + HeaderGuardCheck.cpp JsonTranslationInputCheck.cpp NoLongCheck.cpp NoStaticGettextCheck.cpp diff --git a/tools/clang-tidy-plugin/CataTidyModule.cpp b/tools/clang-tidy-plugin/CataTidyModule.cpp index 441c31a4dadb5..ecfa62ce66925 100644 --- a/tools/clang-tidy-plugin/CataTidyModule.cpp +++ b/tools/clang-tidy-plugin/CataTidyModule.cpp @@ -2,6 +2,7 @@ #include "ClangTidyModule.h" #include "ClangTidyModuleRegistry.h" +#include "HeaderGuardCheck.h" #include "JsonTranslationInputCheck.h" #include "NoLongCheck.h" #include "NoStaticGettextCheck.h" @@ -26,6 +27,7 @@ class CataModule : public ClangTidyModule { public: void addCheckFactories( ClangTidyCheckFactories &CheckFactories ) override { + CheckFactories.registerCheck( "cata-header-guard" ); CheckFactories.registerCheck( "cata-json-translation-input" ); CheckFactories.registerCheck( "cata-no-long" ); CheckFactories.registerCheck( "cata-no-static-gettext" ); diff --git a/tools/clang-tidy-plugin/HeaderGuardCheck.cpp b/tools/clang-tidy-plugin/HeaderGuardCheck.cpp new file mode 100644 index 0000000000000..2a101dea7a3c5 --- /dev/null +++ b/tools/clang-tidy-plugin/HeaderGuardCheck.cpp @@ -0,0 +1,385 @@ +#include "HeaderGuardCheck.h" + +#include + +#include + +#if !defined(_MSC_VER) +#include +#include +#endif + +#if defined(_WIN32) +#include "platform_win.h" +#endif + +namespace clang +{ +namespace tidy +{ +namespace cata +{ + +CataHeaderGuardCheck::CataHeaderGuardCheck( StringRef Name, + ClangTidyContext *Context ) + : ClangTidyCheck( Name, Context ) {} + +/// \brief canonicalize a path by removing ./ and ../ components. +static std::string cleanPath( StringRef Path ) +{ + SmallString<256> Result = Path; + llvm::sys::path::remove_dots( Result, true ); + return Result.str(); +} + +static bool pathExists( const std::string &path ) +{ + struct stat buffer; + return ( stat( path.c_str(), &buffer ) == 0 ); +} + +static bool isHeaderFileName( StringRef FileName ) +{ + return FileName.contains( ".h" ); +} + +static std::string getHeaderGuard( StringRef Filename ) +{ + std::string Guard = tooling::getAbsolutePath( Filename ); + + // Look for the top-level directory + std::string TopDir = Guard; + size_t LastSlash; + bool Found = false; + while( std::string::npos != ( LastSlash = TopDir.find_last_of( "/\\" ) ) ) { + TopDir = TopDir.substr( 0, LastSlash ); + if( pathExists( TopDir + "/.travis.yml" ) ) { + Found = true; + break; + } + } + + if( !Found ) { + return {}; + } + + Guard = Guard.substr( TopDir.length() + 1 ); + + std::replace( Guard.begin(), Guard.end(), '/', '_' ); + std::replace( Guard.begin(), Guard.end(), '.', '_' ); + std::replace( Guard.begin(), Guard.end(), '-', '_' ); + + Guard = "CATA_" + Guard; + + return StringRef( Guard ).upper(); +} + +static std::string formatEndIf( StringRef HeaderGuard ) +{ + return "endif // " + HeaderGuard.str(); +} + +struct MacroInfo_ { + Token Tok; + const MacroInfo *Info; +}; + +struct IfndefInfo { + const IdentifierInfo *MacroId; + SourceLocation Loc; + SourceLocation MacroNameLoc; +}; + +struct FileInfo { + const FileEntry *Entry; + std::vector Macros; + std::vector Ifndefs; + std::map EndIfs; + SourceLocation PragmaOnce; +}; + +class HeaderGuardPPCallbacks : public PPCallbacks +{ + public: + HeaderGuardPPCallbacks( Preprocessor *PP, CataHeaderGuardCheck *Check ) + : PP( PP ), Check( Check ) {} + + std::string GetFileName( SourceLocation Loc ) { + SourceManager &SM = PP->getSourceManager(); + FileID Id = SM.getFileID( Loc ); + if( const FileEntry *Entry = SM.getFileEntryForID( Id ) ) { + return cleanPath( Entry->getName() ); + } else { + return {}; + } + } + + void FileChanged( SourceLocation Loc, FileChangeReason Reason, + SrcMgr::CharacteristicKind FileType, + FileID ) override { + if( Reason == EnterFile && FileType == SrcMgr::C_User ) { + std::string FileName = GetFileName( Loc ); + Files.insert( FileName ); + SourceManager &SM = PP->getSourceManager(); + FileID Id = SM.getFileID( Loc ); + FileInfos[FileName].Entry = SM.getFileEntryForID( Id ); + } + } + + void Ifndef( SourceLocation Loc, const Token &MacroNameTok, + const MacroDefinition &MD ) override { + if( MD ) { + return; + } + + // Record #ifndefs that succeeded. We also need the Location of the Name. + FileInfos[GetFileName( Loc )].Ifndefs.push_back( + IfndefInfo{ MacroNameTok.getIdentifierInfo(), Loc, MacroNameTok.getLocation() } ); + } + + void MacroDefined( const Token &MacroNameTok, + const MacroDirective *MD ) override { + // Record all defined macros. We store the whole token to get info on the + // name later. + SourceLocation Loc = MD->getLocation(); + FileInfos[GetFileName( Loc )].Macros.push_back( + MacroInfo_{ MacroNameTok, MD->getMacroInfo() } ); + } + + void Endif( SourceLocation Loc, SourceLocation IfLoc ) override { + // Record all #endif and the corresponding #ifs (including #ifndefs). + FileInfos[GetFileName( Loc )].EndIfs[IfLoc] = Loc; + } + + void PragmaDirective( SourceLocation Loc, PragmaIntroducerKind ) override { + const char *PragmaData = PP->getSourceManager().getCharacterData( Loc ); + static constexpr const char *PragmaOnce = "#pragma once"; + if( 0 == strncmp( PragmaData, PragmaOnce, strlen( PragmaOnce ) ) ) { + FileInfos[GetFileName( Loc )].PragmaOnce = Loc; + } + } + + void EndOfMainFile() override { + // Now that we have all this information from the preprocessor, use it! + std::unordered_set GuardlessHeaders = Files; + + for( const std::string &FileName : Files ) { + const FileInfo &Info = FileInfos[FileName]; + + if( Info.Macros.empty() || Info.Ifndefs.empty() || Info.EndIfs.empty() ) { + continue; + } + + const IfndefInfo &Ifndef = Info.Ifndefs.front(); + const MacroInfo_ &Macro = Info.Macros.front(); + StringRef CurHeaderGuard = Macro.Tok.getIdentifierInfo()->getName(); + + if( Ifndef.MacroId->getName() != CurHeaderGuard ) { + // If the #ifndef and #define don't match, then it's + // probably not a header guard we're looking at. Abort. + continue; + } + + // Look up Locations for this guard. + SourceLocation DefineLoc = Macro.Tok.getLocation(); + auto EndifIt = Info.EndIfs.find( Ifndef.Loc ); + + if( EndifIt == Info.EndIfs.end() ) { + continue; + } + + SourceLocation EndIfLoc = EndifIt->second; + + GuardlessHeaders.erase( FileName ); + + // If the macro Name is not equal to what we can compute, correct it in + // the #ifndef and #define. + std::vector FixIts; + std::string NewGuard = + checkHeaderGuardDefinition( Ifndef.MacroNameLoc, DefineLoc, FileName, + CurHeaderGuard, FixIts ); + + // Now look at the #endif. We want a comment with the header guard. Fix it + // at the slightest deviation. + checkEndifComment( EndIfLoc, NewGuard, FixIts ); + + // Bundle all fix-its into one warning. The message depends on whether we + // changed the header guard or not. + if( !FixIts.empty() ) { + if( CurHeaderGuard != NewGuard ) { + Check->diag( Ifndef.Loc, "Header guard does not follow preferred style." ) + << FixIts; + } else { + Check->diag( EndIfLoc, "#endif for a header guard should reference the " + "guard macro in a comment." ) + << FixIts; + } + } + } + + // Emit warnings for headers that are missing guards. + checkGuardlessHeaders( GuardlessHeaders ); + + // Clear all state. + Files.clear(); + FileInfos.clear(); + } + + bool wouldFixEndifComment( SourceLocation EndIf, StringRef HeaderGuard, + size_t *EndIfLenPtr = nullptr ) { + if( !EndIf.isValid() ) { + return false; + } + const char *EndIfData = PP->getSourceManager().getCharacterData( EndIf ); + // NOLINTNEXTLINE(cata-text-style) + size_t EndIfLen = std::strcspn( EndIfData, "\r\n" ); + if( EndIfLenPtr ) { + *EndIfLenPtr = EndIfLen; + } + + StringRef EndIfStr( EndIfData, EndIfLen ); + // NOLINTNEXTLINE(cata-text-style) + EndIfStr = EndIfStr.substr( EndIfStr.find_first_not_of( "#endif \t" ) ); + + // Give up if there's an escaped newline. + size_t FindEscapedNewline = EndIfStr.find_last_not_of( ' ' ); + if( FindEscapedNewline != StringRef::npos && + EndIfStr[FindEscapedNewline] == '\\' ) { + return false; + } + + return EndIfStr != "// " + HeaderGuard.str(); + } + + /// \brief Look for header guards that don't match the preferred style. Emit + /// fix-its and return the suggested header guard (or the original if no + /// change was made. + static std::string checkHeaderGuardDefinition( SourceLocation Ifndef, + SourceLocation Define, + StringRef FileName, + StringRef CurHeaderGuard, + std::vector &FixIts ) { + std::string CPPVar = getHeaderGuard( FileName ); + + if( CPPVar.empty() ) { + return CurHeaderGuard; + } + + if( Ifndef.isValid() && CurHeaderGuard != CPPVar ) { + FixIts.push_back( FixItHint::CreateReplacement( + CharSourceRange::getTokenRange( + Ifndef, Ifndef.getLocWithOffset( CurHeaderGuard.size() ) ), + CPPVar ) ); + FixIts.push_back( FixItHint::CreateReplacement( + CharSourceRange::getTokenRange( + Define, Define.getLocWithOffset( CurHeaderGuard.size() ) ), + CPPVar ) ); + return CPPVar; + } + return CurHeaderGuard; + } + + /// \brief Checks the comment after the #endif of a header guard and fixes it + /// if it doesn't match \c HeaderGuard. + void checkEndifComment( SourceLocation EndIf, StringRef HeaderGuard, + std::vector &FixIts ) { + size_t EndIfLen; + if( wouldFixEndifComment( EndIf, HeaderGuard, &EndIfLen ) ) { + FixIts.push_back( FixItHint::CreateReplacement( + CharSourceRange::getCharRange( EndIf, + EndIf.getLocWithOffset( EndIfLen ) ), + formatEndIf( HeaderGuard ) ) ); + } + } + + /// \brief Looks for files that were visited but didn't have a header guard. + /// Emits a warning with fixits suggesting adding one. + void checkGuardlessHeaders( std::unordered_set GuardlessHeaders ) { + // Look for header files that didn't have a header guard. Emit a warning and + // fix-its to add the guard. + for( const std::string &FileName : GuardlessHeaders ) { + if( !isHeaderFileName( FileName ) ) { + continue; + } + + SourceManager &SM = PP->getSourceManager(); + const FileInfo &Info = FileInfos.at( FileName ); + const FileEntry *FE = Info.Entry; + if( !FE ) { + fprintf( stderr, "No FileEntry for %s\n", FileName.c_str() ); + continue; + } + FileID FID = SM.translateFile( FE ); + SourceLocation StartLoc = SM.getLocForStartOfFile( FID ); + if( StartLoc.isInvalid() ) { + continue; + } + + std::string CPPVar = getHeaderGuard( FileName ); + if( CPPVar.empty() ) { + continue; + } + // If there's a macro with a name that follows the header guard convention + // but was not recognized by the preprocessor as a header guard there must + // be code outside of the guarded area. Emit a plain warning without + // fix-its. + bool SeenMacro = false; + for( const auto &MacroEntry : Info.Macros ) { + StringRef Name = MacroEntry.Tok.getIdentifierInfo()->getName(); + SourceLocation DefineLoc = MacroEntry.Tok.getLocation(); + if( Name == CPPVar && + SM.isWrittenInSameFile( StartLoc, DefineLoc ) ) { + Check->diag( DefineLoc, "Code/includes outside of area guarded by " + "header guard; consider moving it." ); + SeenMacro = true; + break; + } + } + + if( SeenMacro ) { + continue; + } + + SourceLocation InsertLoc = StartLoc; + + if( Info.PragmaOnce.isValid() ) { + const char *PragmaData = + PP->getSourceManager().getCharacterData( Info.PragmaOnce ); + const char *Newline = strchr( PragmaData, '\n' ); + if( Newline ) { + InsertLoc = Info.PragmaOnce.getLocWithOffset( Newline + 1 - PragmaData ); + } + } + + const char *InsertData = PP->getSourceManager().getCharacterData( InsertLoc ); + const char *Newlines = "\n\n"; + if( InsertData[0] == '\n' || InsertData[0] == '\r' ) { + Newlines = "\n"; + } + + Check->diag( InsertLoc, "Header is missing header guard." ) + << FixItHint::CreateInsertion( + InsertLoc, "#ifndef " + CPPVar + "\n#define " + CPPVar + Newlines ) + << FixItHint::CreateInsertion( + SM.getLocForEndOfFile( FID ), + "\n#" + formatEndIf( CPPVar ) + "\n" ); + } + } + private: + std::unordered_set Files; + std::unordered_map FileInfos; + + Preprocessor *PP; + CataHeaderGuardCheck *Check; +}; + +void CataHeaderGuardCheck::registerPPCallbacks( CompilerInstance &Compiler ) +{ + Compiler.getPreprocessor().addPPCallbacks( + llvm::make_unique( &Compiler.getPreprocessor(), + this ) ); +} + +} // namespace cata +} // namespace tidy +} // namespace clang diff --git a/tools/clang-tidy-plugin/HeaderGuardCheck.h b/tools/clang-tidy-plugin/HeaderGuardCheck.h new file mode 100644 index 0000000000000..d131504f578cd --- /dev/null +++ b/tools/clang-tidy-plugin/HeaderGuardCheck.h @@ -0,0 +1,26 @@ +#ifndef CATA_TOOLS_CLANG_TIDY_PLUGIN_HEADERGUARDCHECK_H +#define CATA_TOOLS_CLANG_TIDY_PLUGIN_HEADERGUARDCHECK_H + +#include + +namespace clang +{ +namespace tidy +{ +namespace cata +{ + +/// Finds and fixes header guards. +/// Based loosely on the LLVM version. +class CataHeaderGuardCheck : public ClangTidyCheck +{ + public: + CataHeaderGuardCheck( StringRef Name, ClangTidyContext *Context ); + void registerPPCallbacks( CompilerInstance &Compiler ) override; +}; + +} // namespace cata +} // namespace tidy +} // namespace clang + +#endif // CATA_TOOLS_CLANG_TIDY_PLUGIN_HEADERGUARDCHECK_H diff --git a/tools/clang-tidy-plugin/JsonTranslationInputCheck.h b/tools/clang-tidy-plugin/JsonTranslationInputCheck.h index c8247b6f353b8..5a8147556444d 100644 --- a/tools/clang-tidy-plugin/JsonTranslationInputCheck.h +++ b/tools/clang-tidy-plugin/JsonTranslationInputCheck.h @@ -1,5 +1,5 @@ -#ifndef CATA_TOOLS_CLANG_TIDY_JSONTRANSLATIONINPUTCHECK_H -#define CATA_TOOLS_CLANG_TIDY_JSONTRANSLATIONINPUTCHECK_H +#ifndef CATA_TOOLS_CLANG_TIDY_PLUGIN_JSONTRANSLATIONINPUTCHECK_H +#define CATA_TOOLS_CLANG_TIDY_PLUGIN_JSONTRANSLATIONINPUTCHECK_H #include #include @@ -29,4 +29,4 @@ class JsonTranslationInputCheck : public ClangTidyCheck } // namespace tidy } // namespace clang -#endif // CATA_TOOLS_CLANG_TIDY_JSONTRANSLATIONINPUTCHECK_H +#endif // CATA_TOOLS_CLANG_TIDY_PLUGIN_JSONTRANSLATIONINPUTCHECK_H diff --git a/tools/clang-tidy-plugin/NoLongCheck.h b/tools/clang-tidy-plugin/NoLongCheck.h index 3b75a2dd205da..58b259abec9ab 100644 --- a/tools/clang-tidy-plugin/NoLongCheck.h +++ b/tools/clang-tidy-plugin/NoLongCheck.h @@ -1,5 +1,5 @@ -#ifndef CATA_TOOLS_CLANG_TIDY_NOLONGCHECK_H -#define CATA_TOOLS_CLANG_TIDY_NOLONGCHECK_H +#ifndef CATA_TOOLS_CLANG_TIDY_PLUGIN_NOLONGCHECK_H +#define CATA_TOOLS_CLANG_TIDY_PLUGIN_NOLONGCHECK_H #include #include @@ -31,4 +31,4 @@ class NoLongCheck : public ClangTidyCheck } // namespace tidy } // namespace clang -#endif // CATA_TOOLS_CLANG_TIDY_NOLONGCHECK_H +#endif // CATA_TOOLS_CLANG_TIDY_PLUGIN_NOLONGCHECK_H diff --git a/tools/clang-tidy-plugin/NoStaticGettextCheck.h b/tools/clang-tidy-plugin/NoStaticGettextCheck.h index fbb48dcc7707f..5f4242a2fea44 100644 --- a/tools/clang-tidy-plugin/NoStaticGettextCheck.h +++ b/tools/clang-tidy-plugin/NoStaticGettextCheck.h @@ -1,5 +1,5 @@ -#ifndef CATA_TOOLS_CLANG_TIDY_NOSTATICGETTEXTCHECK_H -#define CATA_TOOLS_CLANG_TIDY_NOSTATICGETTEXTCHECK_H +#ifndef CATA_TOOLS_CLANG_TIDY_PLUGIN_NOSTATICGETTEXTCHECK_H +#define CATA_TOOLS_CLANG_TIDY_PLUGIN_NOSTATICGETTEXTCHECK_H #include #include @@ -29,4 +29,4 @@ class NoStaticGettextCheck : public ClangTidyCheck } // namespace tidy } // namespace clang -#endif // CATA_TOOLS_CLANG_TIDY_NOSTATICGETTEXTCHECK_H +#endif // CATA_TOOLS_CLANG_TIDY_PLUGIN_NOSTATICGETTEXTCHECK_H diff --git a/tools/clang-tidy-plugin/PointInitializationCheck.h b/tools/clang-tidy-plugin/PointInitializationCheck.h index 7925bf5949a6b..a5b899c7c846a 100644 --- a/tools/clang-tidy-plugin/PointInitializationCheck.h +++ b/tools/clang-tidy-plugin/PointInitializationCheck.h @@ -1,5 +1,5 @@ -#ifndef CATA_TOOLS_CLANG_TIDY_POINTINITIALIZATIONCHECK_H -#define CATA_TOOLS_CLANG_TIDY_POINTINITIALIZATIONCHECK_H +#ifndef CATA_TOOLS_CLANG_TIDY_PLUGIN_POINTINITIALIZATIONCHECK_H +#define CATA_TOOLS_CLANG_TIDY_PLUGIN_POINTINITIALIZATIONCHECK_H #include #include @@ -29,4 +29,4 @@ class PointInitializationCheck : public ClangTidyCheck } // namespace tidy } // namespace clang -#endif // CATA_TOOLS_CLANG_TIDY_POINTINITIALIZATIONCHECK_H +#endif // CATA_TOOLS_CLANG_TIDY_PLUGIN_POINTINITIALIZATIONCHECK_H diff --git a/tools/clang-tidy-plugin/SimplifyPointConstructorsCheck.h b/tools/clang-tidy-plugin/SimplifyPointConstructorsCheck.h index 81b289a64afb6..7e16c3ae133f5 100644 --- a/tools/clang-tidy-plugin/SimplifyPointConstructorsCheck.h +++ b/tools/clang-tidy-plugin/SimplifyPointConstructorsCheck.h @@ -1,5 +1,5 @@ -#ifndef CATA_TOOLS_CLANG_TIDY_SIMPLIFYPOINTCONSTRUCTORSCHECK_H -#define CATA_TOOLS_CLANG_TIDY_SIMPLIFYPOINTCONSTRUCTORSCHECK_H +#ifndef CATA_TOOLS_CLANG_TIDY_PLUGIN_SIMPLIFYPOINTCONSTRUCTORSCHECK_H +#define CATA_TOOLS_CLANG_TIDY_PLUGIN_SIMPLIFYPOINTCONSTRUCTORSCHECK_H #include #include @@ -30,4 +30,4 @@ class SimplifyPointConstructorsCheck : public ClangTidyCheck } // namespace tidy } // namespace clang -#endif // CATA_TOOLS_CLANG_TIDY_SIMPLIFYPOINTCONSTRUCTORSCHECK_H +#endif // CATA_TOOLS_CLANG_TIDY_PLUGIN_SIMPLIFYPOINTCONSTRUCTORSCHECK_H diff --git a/tools/clang-tidy-plugin/StringLiteralIterator.h b/tools/clang-tidy-plugin/StringLiteralIterator.h index f5ccef962cc85..3aad838b9718a 100644 --- a/tools/clang-tidy-plugin/StringLiteralIterator.h +++ b/tools/clang-tidy-plugin/StringLiteralIterator.h @@ -1,5 +1,5 @@ -#ifndef CATA_TOOLS_CLANG_TIDY_STRINGLITERALITERATOR_H -#define CATA_TOOLS_CLANG_TIDY_STRINGLITERALITERATOR_H +#ifndef CATA_TOOLS_CLANG_TIDY_PLUGIN_STRINGLITERALITERATOR_H +#define CATA_TOOLS_CLANG_TIDY_PLUGIN_STRINGLITERALITERATOR_H #include #include @@ -85,4 +85,4 @@ struct iterator_traits { }; } // namespace std -#endif // CATA_TOOLS_CLANG_TIDY_STRINGLITERALITERATOR_H +#endif // CATA_TOOLS_CLANG_TIDY_PLUGIN_STRINGLITERALITERATOR_H diff --git a/tools/clang-tidy-plugin/TestFilenameCheck.h b/tools/clang-tidy-plugin/TestFilenameCheck.h index 2f09012c3a29d..74ebb865e5f5d 100644 --- a/tools/clang-tidy-plugin/TestFilenameCheck.h +++ b/tools/clang-tidy-plugin/TestFilenameCheck.h @@ -1,5 +1,5 @@ -#ifndef CATA_TOOLS_CLANG_TIDY_TESTFILENAMECHECK_H -#define CATA_TOOLS_CLANG_TIDY_TESTFILENAMECHECK_H +#ifndef CATA_TOOLS_CLANG_TIDY_PLUGIN_TESTFILENAMECHECK_H +#define CATA_TOOLS_CLANG_TIDY_PLUGIN_TESTFILENAMECHECK_H #include @@ -29,4 +29,4 @@ class TestFilenameCheck : public ClangTidyCheck } // namespace tidy } // namespace clang -#endif // CATA_TOOLS_CLANG_TIDY_TESTFILENAMECHECK_H +#endif // CATA_TOOLS_CLANG_TIDY_PLUGIN_TESTFILENAMECHECK_H diff --git a/tools/clang-tidy-plugin/TextStyleCheck.h b/tools/clang-tidy-plugin/TextStyleCheck.h index 4fcf1cd6a5f7f..5d4101e006cec 100644 --- a/tools/clang-tidy-plugin/TextStyleCheck.h +++ b/tools/clang-tidy-plugin/TextStyleCheck.h @@ -1,5 +1,5 @@ -#ifndef CATA_TOOLS_CLANG_TIDY_TEXTSTYLECHECK_H -#define CATA_TOOLS_CLANG_TIDY_TEXTSTYLECHECK_H +#ifndef CATA_TOOLS_CLANG_TIDY_PLUGIN_TEXTSTYLECHECK_H +#define CATA_TOOLS_CLANG_TIDY_PLUGIN_TEXTSTYLECHECK_H #include #include @@ -33,4 +33,4 @@ class TextStyleCheck : public ClangTidyCheck } // namespace tidy } // namespace clang -#endif // CATA_TOOLS_CLANG_TIDY_TEXTSTYLECHECK_H +#endif // CATA_TOOLS_CLANG_TIDY_PLUGIN_TEXTSTYLECHECK_H diff --git a/tools/clang-tidy-plugin/TranslatorCommentsCheck.h b/tools/clang-tidy-plugin/TranslatorCommentsCheck.h index 29d8d0e556b5c..c0da879456af9 100644 --- a/tools/clang-tidy-plugin/TranslatorCommentsCheck.h +++ b/tools/clang-tidy-plugin/TranslatorCommentsCheck.h @@ -1,5 +1,5 @@ -#ifndef CATA_TOOLS_CLANG_TIDY_TRANSLATORCOMMENTSCHECK_H -#define CATA_TOOLS_CLANG_TIDY_TRANSLATORCOMMENTSCHECK_H +#ifndef CATA_TOOLS_CLANG_TIDY_PLUGIN_TRANSLATORCOMMENTSCHECK_H +#define CATA_TOOLS_CLANG_TIDY_PLUGIN_TRANSLATORCOMMENTSCHECK_H #include #include @@ -42,4 +42,4 @@ class TranslatorCommentsCheck : public ClangTidyCheck } // namespace tidy } // namespace clang -#endif // CATA_TOOLS_CLANG_TIDY_TRANSLATORCOMMENTSCHECK_H +#endif // CATA_TOOLS_CLANG_TIDY_PLUGIN_TRANSLATORCOMMENTSCHECK_H diff --git a/tools/clang-tidy-plugin/UseNamedPointConstantsCheck.h b/tools/clang-tidy-plugin/UseNamedPointConstantsCheck.h index e01965ef8faa0..2e8bcf9861dd6 100644 --- a/tools/clang-tidy-plugin/UseNamedPointConstantsCheck.h +++ b/tools/clang-tidy-plugin/UseNamedPointConstantsCheck.h @@ -1,5 +1,5 @@ -#ifndef CATA_TOOLS_CLANG_TIDY_USENAMESPOINTCONSTANTSCHECK_H -#define CATA_TOOLS_CLANG_TIDY_USENAMESPOINTCONSTANTSCHECK_H +#ifndef CATA_TOOLS_CLANG_TIDY_PLUGIN_USENAMEDPOINTCONSTANTSCHECK_H +#define CATA_TOOLS_CLANG_TIDY_PLUGIN_USENAMEDPOINTCONSTANTSCHECK_H #include #include @@ -30,4 +30,4 @@ class UseNamedPointConstantsCheck : public ClangTidyCheck } // namespace tidy } // namespace clang -#endif // CATA_TOOLS_CLANG_TIDY_USENAMESPOINTCONSTANTSCHECK_H +#endif // CATA_TOOLS_CLANG_TIDY_PLUGIN_USENAMEDPOINTCONSTANTSCHECK_H diff --git a/tools/clang-tidy-plugin/UsePointApisCheck.h b/tools/clang-tidy-plugin/UsePointApisCheck.h index 7c6f990f0913e..5d14331872fd7 100644 --- a/tools/clang-tidy-plugin/UsePointApisCheck.h +++ b/tools/clang-tidy-plugin/UsePointApisCheck.h @@ -1,5 +1,5 @@ -#ifndef CATA_TOOLS_CLANG_TIDY_USEPOINTAPISCHECK_H -#define CATA_TOOLS_CLANG_TIDY_USEPOINTAPISCHECK_H +#ifndef CATA_TOOLS_CLANG_TIDY_PLUGIN_USEPOINTAPISCHECK_H +#define CATA_TOOLS_CLANG_TIDY_PLUGIN_USEPOINTAPISCHECK_H #include #include @@ -30,4 +30,4 @@ class UsePointApisCheck : public ClangTidyCheck } // namespace tidy } // namespace clang -#endif // CATA_TOOLS_CLANG_TIDY_USEPOINTAPISCHECK_H +#endif // CATA_TOOLS_CLANG_TIDY_PLUGIN_USEPOINTAPISCHECK_H diff --git a/tools/clang-tidy-plugin/UsePointArithmeticCheck.h b/tools/clang-tidy-plugin/UsePointArithmeticCheck.h index 8bd630b1bbb35..f6010ea86bbbf 100644 --- a/tools/clang-tidy-plugin/UsePointArithmeticCheck.h +++ b/tools/clang-tidy-plugin/UsePointArithmeticCheck.h @@ -1,5 +1,5 @@ -#ifndef CATA_TOOLS_CLANG_TIDY_USEPOINTARITHMETICCHECK_H -#define CATA_TOOLS_CLANG_TIDY_USEPOINTARITHMETICCHECK_H +#ifndef CATA_TOOLS_CLANG_TIDY_PLUGIN_USEPOINTARITHMETICCHECK_H +#define CATA_TOOLS_CLANG_TIDY_PLUGIN_USEPOINTARITHMETICCHECK_H #include #include @@ -30,4 +30,4 @@ class UsePointArithmeticCheck : public ClangTidyCheck } // namespace tidy } // namespace clang -#endif // CATA_TOOLS_CLANG_TIDY_USEPOINTARITHMETICCHECK_H +#endif // CATA_TOOLS_CLANG_TIDY_PLUGIN_USEPOINTARITHMETICCHECK_H diff --git a/tools/clang-tidy-plugin/Utils.h b/tools/clang-tidy-plugin/Utils.h index 38b1fc2e1bfac..3d3ff3052bf9e 100644 --- a/tools/clang-tidy-plugin/Utils.h +++ b/tools/clang-tidy-plugin/Utils.h @@ -1,5 +1,5 @@ -#ifndef CATA_TOOLS_CLANG_TIDY_UTILS_H -#define CATA_TOOLS_CLANG_TIDY_UTILS_H +#ifndef CATA_TOOLS_CLANG_TIDY_PLUGIN_UTILS_H +#define CATA_TOOLS_CLANG_TIDY_PLUGIN_UTILS_H #include #include @@ -143,4 +143,4 @@ class NameConvention } // namespace tidy } // namespace clang -#endif // CATA_TOOLS_CLANG_TIDY_UTILS_H +#endif // CATA_TOOLS_CLANG_TIDY_PLUGIN_UTILS_H diff --git a/tools/clang-tidy-plugin/XYCheck.h b/tools/clang-tidy-plugin/XYCheck.h index 8c65d261da63c..4493cc25b2e94 100644 --- a/tools/clang-tidy-plugin/XYCheck.h +++ b/tools/clang-tidy-plugin/XYCheck.h @@ -1,5 +1,5 @@ -#ifndef CATA_TOOLS_CLANG_TIDY_XYCHECK_H -#define CATA_TOOLS_CLANG_TIDY_XYCHECK_H +#ifndef CATA_TOOLS_CLANG_TIDY_PLUGIN_XYCHECK_H +#define CATA_TOOLS_CLANG_TIDY_PLUGIN_XYCHECK_H #include #include @@ -29,4 +29,4 @@ class XYCheck : public ClangTidyCheck } // namespace tidy } // namespace clang -#endif // CATA_TOOLS_CLANG_TIDY_XYCHECK_H +#endif // CATA_TOOLS_CLANG_TIDY_PLUGIN_XYCHECK_H diff --git a/tools/clang-tidy-plugin/test/header-guard-1.h b/tools/clang-tidy-plugin/test/header-guard-1.h new file mode 100644 index 0000000000000..04038ec7f99ea --- /dev/null +++ b/tools/clang-tidy-plugin/test/header-guard-1.h @@ -0,0 +1,10 @@ +// RUN: %check_clang_tidy %s cata-header-guard %t -- -plugins=%cata_plugin -- + +#ifndef THE_WRONG_HEADER_GUARD +// CHECK-MESSAGES: warning: Header guard does not follow preferred style. [cata-header-guard] +// CHECK-FIXES: #ifndef CATA_BUILD_TOOLS_CLANG_TIDY_PLUGIN_TEST_OUTPUT_HEADER_GUARD_1_H_TMP_CPP +#define THE_WRONG_HEADER_GUARD +// CHECK-FIXES: #define CATA_BUILD_TOOLS_CLANG_TIDY_PLUGIN_TEST_OUTPUT_HEADER_GUARD_1_H_TMP_CPP + +#endif +// CHECK-FIXES: #endif // CATA_BUILD_TOOLS_CLANG_TIDY_PLUGIN_TEST_OUTPUT_HEADER_GUARD_1_H_TMP_CPP diff --git a/tools/clang-tidy-plugin/test/header-guard-2.h b/tools/clang-tidy-plugin/test/header-guard-2.h new file mode 100644 index 0000000000000..aa85dcc8ea151 --- /dev/null +++ b/tools/clang-tidy-plugin/test/header-guard-2.h @@ -0,0 +1,8 @@ +// RUN: %check_clang_tidy %s cata-header-guard %t -- -plugins=%cata_plugin -- + +#ifndef CATA_BUILD_TOOLS_CLANG_TIDY_PLUGIN_TEST_OUTPUT_HEADER_GUARD_2_H_TMP_CPP +#define CATA_BUILD_TOOLS_CLANG_TIDY_PLUGIN_TEST_OUTPUT_HEADER_GUARD_2_H_TMP_CPP + +#endif +// CHECK-MESSAGES: warning: #endif for a header guard should reference the guard macro in a comment. [cata-header-guard] +// CHECK-FIXES: #endif // CATA_BUILD_TOOLS_CLANG_TIDY_PLUGIN_TEST_OUTPUT_HEADER_GUARD_2_H_TMP_CPP diff --git a/tools/clang-tidy-plugin/test/header-guard-3.h b/tools/clang-tidy-plugin/test/header-guard-3.h new file mode 100644 index 0000000000000..9764af35614cc --- /dev/null +++ b/tools/clang-tidy-plugin/test/header-guard-3.h @@ -0,0 +1,8 @@ +// RUN: %check_clang_tidy %s cata-header-guard %t -- -plugins=%cata_plugin -- +// CHECK-MESSAGES: warning: Header is missing header guard. [cata-header-guard] +// CHECK-FIXES: #ifndef CATA_BUILD_TOOLS_CLANG_TIDY_PLUGIN_TEST_OUTPUT_HEADER_GUARD_3_H_TMP_CPP +// CHECK-FIXES: #define CATA_BUILD_TOOLS_CLANG_TIDY_PLUGIN_TEST_OUTPUT_HEADER_GUARD_3_H_TMP_CPP + +int foo(); + +// CHECK-FIXES: #endif // CATA_BUILD_TOOLS_CLANG_TIDY_PLUGIN_TEST_OUTPUT_HEADER_GUARD_3_H_TMP_CPP diff --git a/tools/clang-tidy-plugin/test/header-guard-4.cpp b/tools/clang-tidy-plugin/test/header-guard-4.cpp new file mode 100644 index 0000000000000..82645c309392e --- /dev/null +++ b/tools/clang-tidy-plugin/test/header-guard-4.cpp @@ -0,0 +1,7 @@ +// RUN: %check_clang_tidy %s cata-header-guard,cata-no-long %t -- -plugins=%cata_plugin -- +// Should not need a header guard because it's not a header. + +// Include another warning just to avoid the "there were no warnings in your +// test case" error. +long foo(); +// CHECK-MESSAGES: warning: Function 'foo' declared as returning 'long'. Prefer int or int64_t to long. [cata-no-long] diff --git a/tools/clang-tidy-plugin/test/header-guard-5.h b/tools/clang-tidy-plugin/test/header-guard-5.h new file mode 100644 index 0000000000000..e1e976590d1e2 --- /dev/null +++ b/tools/clang-tidy-plugin/test/header-guard-5.h @@ -0,0 +1,9 @@ +// RUN: %check_clang_tidy %s cata-header-guard %t -- -plugins=%cata_plugin -- +#pragma once +// CHECK-MESSAGES: [[@LINE]]:1: warning: Header is missing header guard. [cata-header-guard] +// CHECK-FIXES: #ifndef CATA_BUILD_TOOLS_CLANG_TIDY_PLUGIN_TEST_OUTPUT_HEADER_GUARD_5_H_TMP_CPP +// CHECK-FIXES: #define CATA_BUILD_TOOLS_CLANG_TIDY_PLUGIN_TEST_OUTPUT_HEADER_GUARD_5_H_TMP_CPP + +int foo(); + +// CHECK-FIXES: #endif // CATA_BUILD_TOOLS_CLANG_TIDY_PLUGIN_TEST_OUTPUT_HEADER_GUARD_5_H_TMP_CPP diff --git a/tools/clang-tidy-plugin/test/lit.cfg b/tools/clang-tidy-plugin/test/lit.cfg index 4ab6e913a73b3..496804316adfa 100644 --- a/tools/clang-tidy-plugin/test/lit.cfg +++ b/tools/clang-tidy-plugin/test/lit.cfg @@ -8,7 +8,7 @@ config.test_source_root = os.path.dirname(__file__) config.test_exec_root = os.path.join( config.plugin_build_root, 'test') -config.suffixes = ['.cpp'] +config.suffixes = ['.cpp', '.h'] if config.cata_check_clang_tidy: check_clang_tidy = config.cata_check_clang_tidy